HDU 6035 Colorful Tree [树形dp]
来源:互联网 发布:ubuntu系统修复 编辑:程序博客网 时间:2024/06/06 02:40
题意:给一颗树,定义树上路径u到v的价值为路径上不同颜色的节点的数量,问所有路径的总价值为多少
题解:根据题意,所需要求解的价值可以转换为,假设每条路径上包含所有的颜色,也就是n*(n-1)/2*(总颜色个数),然后减去每个颜色对不存在这个颜色的的所有路径的贡献。
dfs树上的每一个节点,对于当前节点,我们对每一个子树,用sum数组记录每一个颜色的截断值,于是这个子树的size-父节点颜色的截断值 来表示该子树与父节点颜色不同的连通块的总个数。
AC代码:
#include<stdio.h>#include<vector>#include<string.h>#define N 200005using namespace std;typedef long long ll;ll col[N],size[N];ll mark[N];vector<ll>vt[N];ll sum[N];ll ans=0;void dfs(ll u,ll fa){ll all=0;size[u]=1;for(ll i=0;i<vt[u].size();i++){ll to=vt[u][i];if(to==fa)continue;ll s=sum[col[u]];dfs(to,u);size[u]+=size[to];ll step=sum[col[u]]-s;all+=step;ans+=(size[to]-step)*(size[to]-step-1)/2;}sum[col[u]]+=-all+size[u];}int main(){ll n;ll cas=1;while(~scanf("%lld",&n)){memset(mark,0,sizeof(mark));memset(size,0,sizeof(size));memset(sum,0,sizeof(sum));for(ll i=0;i<N;i++)vt[i].clear();ll gg=0;ans=0;for(ll i=1;i<=n;i++){scanf("%lld",&col[i]);gg+=mark[col[i]]^1;mark[col[i]]=1;}for(ll i=0;i<n-1;i++){ll u,v;scanf("%lld%lld",&u,&v);vt[u].push_back(v);vt[v].push_back(u);}dfs(1,-1);ll ANS=n*(n-1)*gg/2;for(ll i=1;i<=n;i++){if(gg==col[1]||!mark[i])continue;ans+=(n-sum[i])*(n-sum[i]-1)/2;}printf("Case #%lld: %lld\n",cas++,ANS-ans);}}
阅读全文
2 0
- HDU 6035 Colorful Tree [树形dp]
- hdu 6035 Colorful Tree(树形DP)
- HDU 6035 Colorful Tree (树形dp)
- HDU 6035 Colorful Tree(树形DP)
- HDU 6035 Colorful Tree(树形dp)
- HDU 6035 Colorful Tree(树形DP)
- 【HDU 6035 Colorful Tree】+ 树形 dp + 思维
- Colorful Tree hdu 6035 (虚树,树形dp)
- HDU 6035 Colorful Tree (树形DP,dfs)
- HDU6035 Colorful Tree(树形dp)
- HDU-6035 Colorful Tree(树型dp)
- hdu 6035 Colorful Tree 树状dp
- HUD 6035 Colorful Tree dfs序||树形dp
- 【HDU6035】Colorful Tree(dfs,树形dp)
- hdu 6035 Colorful Tree
- HDU 6035 colorful tree
- [HDU]-6035 Colorful Tree
- hdu 6035 Colorful Tree
- Windows下安装Apache
- 神经网络与深度学习笔记——第1章 使用神经网络识别手写数字
- React Native 第四天
- 动态规划: HDU1003Max Sum
- MySQL 导出数据
- HDU 6035 Colorful Tree [树形dp]
- MySQL 导入数据
- Dialog 的基础知识
- 【华为机试】密码验证合格程序
- oom解决问题
- 数据结构与算法分析之单链表的建立,插入和删除操作。
- 找出一个字符串中出现次数最多的字符
- Linux下Tomcat端口号以及进程相关命令
- Minimum Snap轨迹规划详解(1)轨迹规划入门