HDU-4705 Y(树型dp)
来源:互联网 发布:科学大众网络比赛 编辑:程序博客网 时间:2024/06/08 20:12
传送门:HDU-4705
题意:一棵n个节点的树,要求统计所有满足以下条件的三元组的个数:①ABC是数上的节点;②ABC之间不存在一条连通这3个节点的简单路径
题解:树型dp
dp以u为根节点的子树时,计算2个状态:
①dp1[u]:子树中LCA为u的三元组的个数;
②num[u]:子树中LCA(x,y)!=x且LCA(x,y)!=y的二元组的个数
那么子树u对答案的贡献为:dp1[u]+∑num[v]*(sz[u]-sz[v]),其中v为u的子节点
#pragma comment(linker, "/STACK:1024000000,1024000000")#include<stdio.h>#include<algorithm>using namespace std;typedef long long LL;const int MX = 1e6 + 5;const int inf = 0x3f3f3f3f;struct Edge { int v, nxt;} E[MX * 2];int head[MX], tot, n, m;void add(int u, int v) { E[tot].v = v; E[tot].nxt = head[u]; head[u] = tot++;}void init() { for (int i = 1; i <= n; i++) head[i] = -1; tot = 0;}int f[MX], dp[MX];void dfs(int u, int fa) { f[u] = dp[u] = 0; int cnt1 = inf, cnt2 = inf, sz = 0; for (int i = head[u]; ~i; i = E[i].nxt) { int v = E[i].v; if (v == fa) continue; dfs(v, u); f[u] += dp[v]; dp[u] += dp[v]; if (f[v] - dp[v] < cnt1) { cnt2 = cnt1; cnt1 = f[v] - dp[v]; } else if (f[v] - dp[v] < cnt2) cnt2 = f[v] - dp[v]; sz++; } if (sz > 0) { f[u] = min(f[u] + 2 * sz, f[u] + cnt1 + 2 * (sz - 1)); dp[u] = min(dp[u] + 2 * sz, dp[u] + min(cnt1 + cnt2 + 2 * (sz - 2), cnt1 + 2 * (sz - 1))); }}int main() { int T; //freopen("in.txt", "r", stdin); scanf("%d",&T); while (T--) { scanf("%d", &n); init(); for (int i = 1, u, v; i < n; i++) { scanf("%d%d", &u, &v); add(u, v); add(v, u); } dfs(1, -1); printf("%d\n", dp[1] + 1); } return 0;}
阅读全文
0 0
- hdu - 4705 - Y(树型dp)
- HDU-4705 Y(树型dp)
- HDU 4705 Y(树型DP)
- HDU 4705 Y(简单树形DP)
- hdu 4705 Y(树dp)
- HDU 4705 Y (树形DP)
- hdu 4705 Y (树形dp)
- HDU 4705 Y (树形DP + 计数)
- hdu 4705 Y(计数)
- HDU 4705 Y
- HDU 4705 Y
- hdu 4705 Y
- Hdu 4705 Y -- 树形
- hdu 4705 Y
- HDU 4705 Y
- hdu 4705 Y
- HDOJ 4705 Y 树形DP
- HDOJ题目4705 Y(简单树形DP+数学)
- 【SpringCloud】(九):Feign的自定义配置
- 从零开始的ubuntu下的caffe配置
- 10020---Java sleep和wait区别
- git生成公钥
- Linux系统DNS高速缓存
- HDU-4705 Y(树型dp)
- 开发工具IDEA破解方法
- 使用java的过滤器filter备忘(get和post)
- 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/ch
- 类与类之间的关系
- Bluetooth MESH探究 --- (9) Lower Transport Layer
- 浅谈 JDBC 中 CreateStatement 和 PrepareStatement 的区别与优劣。
- ros要学习的四元数初探
- 潘多拉路由器(PandoraBox SDK Platform)远程web访问设置教程