HDOJ 4705 Y 树形DP
2017-06-03 08:06
357 查看
DP:求出3点构成链的方案数 。然后总方案数减去它
Y
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1738 Accepted Submission(s): 493
Problem Description
![](http://acm.hdu.edu.cn/data/images/C464-1010-1.jpg)
Sample Input
4 1 2 1 3 1 4
Sample Output
1 Hint 1. The only set is {2,3,4}. 2. Please use #pragma comment(linker, "/STACK:16777216")
Source 2013 Multi-University Training Contest 10
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #pragma comment(linker, "/STACK:16777216") using namespace std; typedef long long int LL; const int maxn=100100; vector<int> g[maxn]; int n; LL ans,doubi[maxn],son[maxn]; void dfs(int u,int fa) { LL ndoubi=0,nson=0; son[u]=1; for(int i=0,sz=g[u].size();i<sz;i++) { int v=g[u][i]; if(v==fa) continue; dfs(v,u); son[u]+=son[v]; doubi[u]+=doubi[v]+son[v]; ans+=son[v]*nson; ans+=son[v]*ndoubi; ans+=doubi[v]*nson; ans+=doubi[v]; nson+=son[v]; ndoubi+=doubi[v]; } } int main() { while(scanf("%d",&n)!=EOF) { ans=0; memset(doubi,0,sizeof(doubi)); memset(son,0,sizeof(son)); for(int i=0;i<=n+10;i++) g[i].clear(); for(int i=0;i<n-1;i++) { int a,b; scanf("%d%d",&a,&b); g[a].push_back(b); g[b].push_back(a); } dfs(1,1); cout<<1LL*n*(n-1)*(n-2)/6-ans<<endl; } return 0; }
相关文章推荐
- HDOJ 4705 Y 树形DP
- HDOJ题目4705 Y(简单树形DP+数学)
- [HDOJ 4894] Mart Master [树形DP]
- hdoj 1520 Anniversary party(树形dp)
- hdoj 2412 Party at Hali-Bula 【树形dp】
- HDOJ 5293 Tree chain problem LCA+树链剖分+树形DP
- hdoj2412Party at Hali-Bula【树形dp】
- HDOJ 4044 - GeoDefense 树形DP..泛化背包转移..
- hdoj 1520 Anniversary party 【树形DP入门】
- HDU 4705 树形DP
- 【HDOJ2196】Computer(树的直径,树形DP)
- hdu 4705(树形DP)
- HDOJ The more, The Better 树形DP
- HDU 4705 树形DP
- [HDOJ 4799][BNUOJ 34021] LIKE vs CANDLE [树形DP]
- computer hdoj 2196树形dp
- HDOJ-1011(树形DP)
- hdoj 2242 考研路茫茫——空调教室 【无向图求边双联通 缩点 + 树形dp】
- HDOJ 1011 Starship Troopers(树形DP)
- HDOJ 1561 The more, The Better(树形DP)