[noi2011]道路修建 树形dp
2016-09-06 12:30
323 查看
这道题可以说是树形dp的入门题,也可以看成是一道检验【树】这个数据结构的题目;
这道题只能bfs,毕竟10^6的复杂度win下肯定爆栈了;
但是最恶心的还不是这个,实测用printf输出
View Code
这道题只能bfs,毕竟10^6的复杂度win下肯定爆栈了;
但是最恶心的还不是这个,实测用printf输出
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<string> #include<iomanip> #include<cmath> using namespace std; #define LL long long const int maxn=1003000; int n; struct node{ int y,next,v; }e[maxn<<1]; int linkk[maxn],len=0,siz[maxn],q[maxn],tail=0,fa[maxn],t[maxn],top=0,ru[maxn],w[maxn]; LL ans=0; void insert(int x,int y,int v){ e[++len].y=y; e[len].next=linkk[x]; e[len].v=v; linkk[x]=len; } void init(){ scanf("%d",&n); int x,y,v; for(int i=1;i<n;i++){ scanf("%d%d%d",&x,&y,&v); insert(x,y,v);insert(y,x,v); } } void bfs(){ q[++tail]=1;int x; for(int head=1;head<=tail;head++){ x=q[head]; for(int i=linkk[x];i;i=e[i].next){ if(e[i].y==fa[x])continue; q[++tail]=e[i].y; fa[e[i].y]=x; ru[x]++; w[e[i].y]=e[i].v; } if(!ru[x])t[++top]=x; } for(int head=1;head<=top;head++){ x=t[head];siz[x]++; siz[fa[x]]+=siz[x]; ru[fa[x]]--; if(!ru[fa[x]])t[++top]=fa[x]; ans+=(LL)abs(n-2*siz[x])*(LL)w[x]; } } void work(){ bfs(); cout<<ans<<endl; } int main(){ freopen("1.in","r",stdin); freopen("1.out","w",stdout); init(); work(); }
View Code
相关文章推荐
- noi2011 道路修建(树形dp)
- 【BZOJ2435】【Noi2011】道路修建 树形DP
- [BZOJ2435][Noi2011]道路修建(树形dp)
- 【BZOJ】2435: [Noi2011]道路修建(树形dp)
- bzoj 2435: [Noi2011]道路修建【树形dp】
- BZOJ 2435 道路修建 NOI2011 树形DP
- 【bzoj2435】[NOI2011]道路修建 树形dp
- BZOJ2435 [Noi2011]道路修建 【树形Dp 吧。。】
- BZOJ2435 [Noi2011]道路修建 【树形Dp 吧。。】
- [bzoj2435][Noi2011]道路修建(树上dp)
- bzoj 2435: [Noi2011]道路修建 树上 dp
- bzoj2435: [Noi2011]道路修建 树上dp
- 【bzoj2435】 NOI2011 道路修建 水题
- 【树的遍历】[NOI2011]道路修建
- BZOJ 2435: [Noi2011]道路修建 树的遍历-_-
- [BZOJ2435][Noi2011]道路修建
- bzoj2435[Noi2011] 道路修建
- BZOJ2435: [Noi2011]道路修建
- 【BZOJ】【P2435】【Noi2011】【道路修建】【题解】【dfs】
- bzoj1063: [Noi2008]道路设计 树形dp