UVALive 6436 The Busiest City
2016-02-04 22:04
459 查看
题目链接:UVALive 6436 The Busiest City
题意:给你从1到n总共n个数字,同时给你n-1个连接,同时保证任意两个点之间都可以连接。现在假设任意两个点简单连通路过某点则某点的繁荣度+1,求所有点的最大繁荣度。
题解:首先我们可以知道,任意两个点之间连接,且只有n-1个连接,可以得到没有环形结构。再其次,我们可以明白任意一个点的繁荣度是以它为根的所有子树的乘积。
代码如下:
算法分析,首先zs数组是用来存节点的个数的,我们明确因为没有环所以必然能找到树叶,当找到树叶的时候即该点出现了,所以该点的节点数记为1。现在考虑两个函数的意义
由于这两个函数求的部分是有重复的,第一个函数算出来的结果实际上是含有冗余项,为了出去冗余的部分一种方式是将冗余部分找出来删去,另一种因为只会冗余其中一部分情况一次只需我们补全不冗余的数量即可,最终求出来的是实际结果的2倍。
题意:给你从1到n总共n个数字,同时给你n-1个连接,同时保证任意两个点之间都可以连接。现在假设任意两个点简单连通路过某点则某点的繁荣度+1,求所有点的最大繁荣度。
题解:首先我们可以知道,任意两个点之间连接,且只有n-1个连接,可以得到没有环形结构。再其次,我们可以明白任意一个点的繁荣度是以它为根的所有子树的乘积。
代码如下:
#include<bits/stdc++.h> using namespace std; const int inf=1123456789; const int maxn=123456; vector<int>s[20100]; int zs[20100]; int ans,n; void dfs(int now,int pre) { int res = 0; int len = s[now].size(); zs[now]=1; int ne; for (int i = 0;i < len;i++) { ne = s[now][i]; if (ne == pre) continue; dfs(ne,now); res += (zs[ne]*(n-1-zs[ne])); zs[now]+=zs[ne]; } res += (n - zs[now])*(zs[now] - 1); if (res>ans) ans = res; } int main() { int t; scanf("%d",&t); for (int tt=1;tt<=t;tt++) { for (int i = 1;i <= 20100;i++) s[i].clear(); scanf("%d",&n); int a,b; for (int nn = 1;nn < n;nn++) { scanf("%d %d",&a,&b); s[a].push_back(b); s[b].push_back(a); } ans = 0; dfs(1,0); printf("Case #%d: %d\n",tt,ans/2); } return 0; }
算法分析,首先zs数组是用来存节点的个数的,我们明确因为没有环所以必然能找到树叶,当找到树叶的时候即该点出现了,所以该点的节点数记为1。现在考虑两个函数的意义
res += (zs[ne]*(n-1-zs[ne]));这个函数的意思是该点dfs过后计算繁荣度,即以now为节点,以ne为下一节点的情况下的now的繁荣度计算。
res += (n - zs[now])*(zs[now] - 1);这个函数的意思则是在遍历过当前节点的后续节点后,以zs[now]的节点数计算繁荣度。
由于这两个函数求的部分是有重复的,第一个函数算出来的结果实际上是含有冗余项,为了出去冗余的部分一种方式是将冗余部分找出来删去,另一种因为只会冗余其中一部分情况一次只需我们补全不冗余的数量即可,最终求出来的是实际结果的2倍。
相关文章推荐
- 树形DP 或 最小顶点覆盖=最大匹配(双向图)(HDU 1053)
- UVALive 4244 Party Party Party(HDU 2779 && Sicily 1663)
- UVALive 6741 The Sacrificial Firepits
- [BZOJ1017][JSOI2008][树形DP]魔兽地图DotR
- ZOJ3824 Fiber-optic Network
- hihocoder #1035 : 自驾旅行 III 树形DP
- POJ 3342
- URAL1018
- hdu1561 zoj3201
- poj 3107 Godfather
- zoj3201Tree of Tree
- Codeforces Round #135 (Div. 2)VD. Choosing Capital for Treeland
- POJ 1848 Tree
- UVALive 6800 The Mountain of Gold (bellman_ford判负环)
- HDU 1561 The more, The Better(树形DP)
- 树形dp简单总结
- Party at Hali-Bula
- zoj cut the tree(树形dp,小细节真的很多)
- poj 2486 Apple Tree(树形dp)
- poj 1155 TELE(树形泛化背包dp)