[zjoi2007]时态同步(代码片段)

zzzyc zzzyc     2022-11-12     400

关键词:

这个题。。。一眼树形DP???

我们通过模拟几组数据可以发现。。。

其实只需要保证每一棵树的边权之和加起来相等。。。

那么这些子树组成的一棵大树。。。就是最终我们要求的。。。

既然这样。。。

我们第一遍需要从叶子结点推到根节点。。。找到这些最大值。。。

我们便于理解。。。这里将树分级。。。叶子结点为1级。。。比它大一号的为2级。。。

以此类推。。。

然后依次枚举每一个以当前节点为根的n级子树的权值和它所在n+1级子树要达到的最大值

这样就可以统计出答案了。。。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 500010
using namespace std;

int n,s,x,y,z,f[maxn],head[maxn<<1],num;
long long ans;
bool use[maxn];

struct asd
    int nxt;
    int to;
    int dis;
 a[maxn<<1];

inline void add(int x,int y,int z)

    a[++num].nxt=head[x];
    a[num].to=y;
    a[num].dis=z;
    head[x]=num;


inline void dfs1(int u)

    use[u]=1;
    for(int i=head[u];i;i=a[i].nxt)
    
        int to=a[i].to;
        if(!use[to])
        
            dfs1(to);
            f[u]=max(f[u],f[to]+a[i].dis);
        
    


inline void dfs2(int u)

    use[u]=1;
    for(int i=head[u];i;i=a[i].nxt)
    
        int to=a[i].to;
        if(!use[to])
        
            dfs2(to);
            ans+=f[u]-f[to]-a[i].dis;
        
    


int main()

    scanf("%d%d",&n,&s);
    for(int i=1;i<=n-1;i++)
    
        scanf("%d%d%d",&x,&y,&z);
        add(x,y,z); add(y,x,z);
    
    dfs1(s);
    memset(use,0,sizeof(use));
    dfs2(s);
    printf("%lld\\n",ans);
    return 0;
呆码

 

[zjoi2007]时态同步(代码片段)

这个题。。。一眼树形DP???我们通过模拟几组数据可以发现。。。其实只需要保证每一棵树的边权之和加起来相等。。。那么这些子树组成的一棵大树。。。就是最终我们要求的。。。既然这样。。。我们第一遍需要从叶子... 查看详情

时态同步[zjoi2007](代码片段)

题目描述小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在... 查看详情

p1131[zjoi2007]时态同步(代码片段)

P1131[ZJOI2007]时态同步题意:有一颗树,有一个点是激发器,从这个点开始可以产生一个激励电流,通过导线传向每一个它所连接的节点,经过一个边的花费为w[i],你有一个道具,每用一次可以让一个边的花... 查看详情

p1131[zjoi2007]时态同步(代码片段)

P1131[ZJOI2007]时态同步题意:有一颗树,有一个点是激发器,从这个点开始可以产生一个激励电流,通过导线传向每一个它所连接的节点,经过一个边的花费为w[i],你有一个道具,每用一次可以让一个边的花... 查看详情

bzoj1060:[zjoi2007]时态同步——题解(代码片段)

http://www.lydsy.com/JudgeOnline/problem.php?id=1060https://www.luogu.org/problemnew/show/P1131小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号。电路板的各个节点由若... 查看详情

p1131[zjoi2007]时态同步(代码片段)

$\colorcyan>>Question$题意让我们用最少的代价把叶子节点到根节点的距离调成相同每次向最长链看齐即可令$f[u]$表示以$u$为根到叶节点的最长链长度则$$f[u]=max\left\f[v]+e(u,v)\right\$$统计答案$$ans=\sum_v(e(u,v)\inE)f[u]-(f[v]+e(u,v))$$上代码... 查看详情

bzoj1060[zjoi2007]时态同步(代码片段)

传送门Description  小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,... 查看详情

[zjoi2007]时态同步(dfs+贪心)(代码片段)

小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3.进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在且仅存在一条... 查看详情

b1060[zjoi2007]时态同步dfs(代码片段)

两遍dfs,第一遍有点像找重链,第二遍维护答案,每个点维护一个当前深度,然后就没啥了。ps:memset(lst,-1,sizeof(lst));这一句多余的话让我debug半天。。。题干:Description  小Q在电子工艺实习课上学习焊接电路板。一块电路板由... 查看详情

bzoj1060:[zjoi2007]时态同步树形dp(代码片段)

可能算不上dp,大概是个树形模拟先一遍dfs算出f[u]为每个点最深的叶子到u的距离,然后再dfs一下,ans加上f[u]-f[e[i].to]-e[i].va,f[u]-f[e[i].to]是这条边应该的用时#include<iostream>#include<cstdio>usingnamespacestd;constintN=500005;intn,m,cnt,f... 查看详情

[树形dp]luogup1131[zjoi2007]时态同步(代码片段)

https://www.luogu.org/problemnew/show/P1131分析我们设t[i]为以i为根的子树中需要最久达到的点所需的时间那么我们容易用一次DFS预处理出来,再DFS记录深入到当前点已经加过k次,ans=Σ(t[rt]-t[u]-k),k=t[rt]-t[u] #include<iostream>#include&... 查看详情

p1131[zjoi2007]时态同步树形dp(代码片段)

  题目描述小QQ在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3…1,2,3….进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两... 查看详情

[zjoi2007]时态同步

1060:[ZJOI2007]时态同步TimeLimit:10Sec  MemoryLimit:162MBSubmit:2629  Solved:880[Submit][Status][Discuss]Description  小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….... 查看详情

p1131[zjoi2007]时态同步(代码片段)

P1131[ZJOI2007]时态同步树形DP题意描述有一棵树,有n个节点,n-1条边,每条边都有一个权值。要求每个叶子结点到根节点的边权相同,求最少的改动数量(不是次数)看不懂的话,走传送门算法分析很显然是DP(我也不知道是怎么... 查看详情

[zjoi2007]时态同步

1060:[ZJOI2007]时态同步2017-09-10Description  小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电... 查看详情

[zjoi2007]时态同步

寒假填坑五十道省选题——第二道[ZJOI2007]时态同步  题目描述小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号。电路板的各个节点由... 查看详情

[bzoj1060][zjoi2007]时态同步树形dp

1060:[ZJOI2007]时态同步TimeLimit: 10Sec  MemoryLimit: 162MBSubmit: 2988  Solved: 1086[Submit][Status][Discuss]Description  小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节 查看详情

luogu1131[zjoi2007]时态同步

num[x]表示x到达叶子最远路径。每个子节点对答案的贡献是num[x]-(num[t]+edge[i].val)#include<iostream>#include<cstdio>usingnamespacestd;typedeflonglongll;intn,ss,hea[500005],cnt,uu,vv,ww;llnum[500005],ans;structEdge 查看详情