标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)
Total Submission(s): 3397 Accepted Submission(s): 1588
// // main.cpp // hdu4003 // // Created by Candy on 9/23/16. // Copyright © 2016 Candy. All rights reserved. // #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int N=1e4+5,M=12; int read(){ char c=getchar();int x=0,f=1; while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1; c=getchar();} while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘; c=getchar();} return x*f; } struct edge{ int v,w,ne; }e[N<<1]; int h[N],cnt=0; void ins(int u,int v,int w){ cnt++; e[cnt].v=v;e[cnt].w=w;e[cnt].ne=h[u];h[u]=cnt; cnt++; e[cnt].v=u;e[cnt].w=w;e[cnt].ne=h[v];h[v]=cnt; } int n,s,m,u,v,w; int f[N][M]; void dp(int u,int fa){ for(int i=h[u];i;i=e[i].ne){ int v=e[i].v,w=e[i].w; if(v==fa) continue; dp(v,u); for(int j=m;j>=0;j--){ //ti ji f[u][j]+=f[v][0]+w*2;//must choose for(int k=1;k<=j;k++)//group f[u][j]=min(f[u][j],f[u][j-k]+f[v][k]+w*k); } } } int main(int argc, const char * argv[]) { while(cin>>n>>s>>m){ cnt=0; memset(h,0,sizeof(h)); for(int i=1;i<=n-1;i++){ u=read();v=read();w=read(); ins(u,v,w); } memset(f,0,sizeof(f)); dp(s,0); printf("%d\n",f[s][m]); } return 0; }
HDU4003Find Metal Mineral[树形DP 分组背包]
标签:
原文地址:http://www.cnblogs.com/candy99/p/5899632.html