12.13

发布时间 2023-12-13 21:47:40作者: HS_xh

班主任说明天带我们去玩雪,好。

今天有的班级去了,但是被年级主任 D 了,理由是“都没雪玩什么雪”,好像很有道理,但是今晚衡水暴雪所以明天就有雪了???

今天买了个本,很厚,之前我也买过两个一样大小的本,然后都写满了,一年写完一个,但是每次到分班都会丢失,导致我每年写的东西都会忘掉,可能这就是命中注定吧。

所以我在本的扉页上写了

    新的班级,新的开始
    一起努力吧

打算有一个持之以恒的习惯,包括但不限于每天在本子上写点什么,也许这才是所谓“随笔”吧,随意的去写才能体现“随”,但是又不能太随意,这样就没意义。

今天被吓到了

有一个女同学,今天突然跟我说昨天晚上梦到我了,那个同学不好评价,反正我听完感觉心脏都骤停了,我想活久一点。

晦气

今天写了错过的若干模拟赛题。

最大生成树

看似最大生成树实则贪心

对于一个点来讲,距离它最远的点一定在最左侧或者最右侧,所以所有的边一定有一
个端点是最左侧的或者最右侧的,于是只要枚举每个点,对左右端点各取一个最大值即可。

言简意赅

Code
#include<bits/stdc++.h>
const int N=1e6;
using namespace std;
#define int long long
int a[N],n,ans;
signed main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;++i)
        cin>>a[i];
    sort(a,a+n+1);
    ans+=a[n]-a[1];
    for(int i=2;i<n;++i)
        ans+=max(a[n]-a[i],a[i]-a[1]);
    cout<<ans;
}

#define int long long 是坏习惯。

Present

学长出的阿卡伊模拟赛???

此题模拟队列,双端队列可过。

Future

唉,建树DFS,然后DP。

这种情况你可以当成 \(dp\) 做,\(dp_i=dp_{f_i}+w_i\)

因为有负权所以 \(ans\) 初始值要设为极小值。

Code
    #include<bits/stdc++.h>
    const int N=1e5+5;
    using namespace std;
    #define int long long
    struct node
    {
        int next,to;
    }e[N];
    int w[N],f[N],head[N],cnt=0,du[N],u;
    int n,m,ans=-(1<<30);
    void add(int x,int v)
    {
        cnt++;
        e[cnt].next=head[x];
        e[cnt].to=v;
        head[x]=cnt;
    }
    void dfs(int x,int fa)
    {
        f[x]=f[fa]+w[x];
        for(int i=head[x];i!=0;i=e[i].next)
            if(e[i].to!=fa)
                dfs(e[i].to,x);
    }
    signed main()
    {
        freopen("ftr.in","r",stdin);
        freopen("ftr.out","w",stdout);
        cin>>n;
        for(int i=1;i<=n;++i)
            cin>>w[i];
        for(int i=1;i<=n;++i)
            {
                cin>>u;
                add(u,i);
                du[u]++;
            }
        dfs(1,0);
        for(int i=1;i<=n;++i)
            if(du[i]==0)
                ans=max(ans,f[i]);
        cout<<ans;
    }

剩下写的是水题(一共也没写几道

推歌
Retribution By Kry.exe & Nm-y

Sigma 好像是 HappyCore