zoukankan      html  css  js  c++  java
  • [洛谷P1131][ZJOI2007]时态同步

    题目大意:给你一棵树,每条边有边权,要求增加一些边的边权,使得根节点到每个叶子节点的距离相等,求出最少共增加多少边权。

    题解:树形$DP$,对于每个点,如果它到它的子树中的叶子节点距离不同,一定要在这个时候改变,不然就没有机会了。$dfs$,对于每个点求出要修改多少使得它的子树符合条件。

    卡点:

    C++ Code:

    #include <cstdio>
    #include <algorithm>
    #define maxn 500010
    int head[maxn], cnt;
    struct Edge {
    	int to, nxt, w;
    } e[maxn << 1];
    inline void add(int a, int b, int c) {
    	e[++cnt] = (Edge) {b, head[a], c}; head[a] = cnt;
    }
    
    long long ans[maxn], M[maxn];
    void dfs(int u, int fa = 0) {
    	for (int i = head[u]; i; i = e[i].nxt) {
    		int v = e[i].to;
    		if (v != fa) {
    			dfs(v, u);
    			M[u] = std::max(M[u], M[v] + e[i].w);
    			ans[u] += ans[v];
    		}
    	}
    	for (int i = head[u]; i; i = e[i].nxt) {
    		int v = e[i].to;
    		if (v != fa) ans[u] += M[u] - M[v] - e[i].w;
    	}
    }
    
    int n, S;
    int main() {
    	scanf("%d", &n);
    	scanf("%d", &S);
    	for (int i = 1, a, b, c; i < n; i++) {
    		scanf("%d%d%d", &a, &b, &c);
    		add(a, b, c);
    		add(b, a, c);
    	}
    	dfs(S);
    	printf("%lld
    ", ans[S]);
    	return 0;
    }
    

      

  • 相关阅读:
    代码审计中的XSS反射型漏洞
    PHP 代码审计代码执行注入
    4.代码审计之代码注入
    3.代码审计之 命令注入
    2.代码审计之超全局变量
    spring, spring mvc, mybatis整合文件配置详解
    StringUtils方法
    主键与外键
    MySQL面试题
    spring面试题
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/9829619.html
Copyright © 2011-2022 走看看