蓝桥杯 金属采集 树形动态规划

来源:互联网 发布:c语言中[]是什么意思 编辑:程序博客网 时间:2024/04/27 16:20
参考:http://www.myexception.cn/program/1598926.html
#include <iostream>#include <vector>using namespace std;#define MAX_N 100005#define NUM 11int f[MAX_N][NUM];bool vis[MAX_N];int cost[MAX_N]; int n,s,k; struct Node{int v,val; };vector<Node>node[MAX_N]; void dfs(int p){for (int i=0;i<=k;i++){f[p][i]=0; } vis[p]=1; for (int i=0;i<node[p].size();i++){ int son=node[p][i].v; if (vis[son])continue; cost[son]=node[p][i].val; dfs(son); for (int i=k;i>=0;i--){f[p][i]+=(f[son][0]+2*cost[son]); for (int j=1;j<=i;j++){f[p][i]=min(f[p][i],f[son][j]+cost[son]*j+f[p][i-j]); }}}}int main(){int a,b,c; Node son;  cin>>n>>s>>k; for (int i=0;i<=n;i++){node[i].clear(); vis[i]=false; }for (int i=1;i<n;i++) {cin>>a>>b>>c; son.v=b; son.val=c; node[a].push_back(son); son.v=a; son.val=c; node[b].push_back(son);  }dfs(s); cout<<f[s][k]<<endl; return 0; }

0 0
原创粉丝点击