小欧有一棵包含个结点的树,每个结点有一个人,处在第个结点的人想吃恰好个苹果。但他手里有个苹果,可能不够吃,也可能太多了。 他们每次传递可以向树上相邻的结点传递1个苹果,小欧想知道,让所有人都恰好获得他想吃的苹果的数量总共需要有多少次传递?
区块链毕设网qklbishe.com为您提供问题的解答
小欧有一棵包含个结点的树,每个结点有一个人,处在第个结点的人想吃恰好个苹果。但他手里有个苹果,可能不够吃,也可能太多了。
他们每次传递可以向树上相邻的结点传递1个苹果,小欧想知道,让所有人都恰好获得他想吃的苹果的数量总共需要有多少次传递?
#include #include #include #include using namespace std; long long dfs(const vector>& tree,vector& hasAdd,int x,vector& num){ long long res=0; hasAdd[x]=1; for(int i=0;i<tree[x].size();++i){ if(hasAdd[tree[x][i]]==0){ res+=dfs(tree,hasAdd,tree[x][i],num); num[x]+=num[tree[x][i]]; } } res+=abs(num[x]); return res; } int main(){ int n; cin>>n; vector num(n+1); vector> tree(n+1); vector hasAdd(n+1,0); for(int i=1;i<=n;++i){ cin>>num[i]; num[i]-=i; } for(int i=0;i<n-1;++i){ int u,v; cin>>u>>v; tree[u].push_back(v); tree[v].push_back(u); } long long res=0; res = dfs(tree,hasAdd,1,num); cout<<res<<endl; }
dfs秒了
36:01
以上就是关于问题小欧有一棵包含个结点的树,每个结点有一个人,处在第个结点的人想吃恰好个苹果。但他手里有个苹果,可能不够吃,也可能太多了。
他们每次传递可以向树上相邻的结点传递1个苹果,小欧想知道,让所有人都恰好获得他想吃的苹果的数量总共需要有多少次传递?的答案
欢迎关注区块链毕设网-
web3一级市场套利打新赚钱空投教程
区块链NFT链游项目方科学家脚本开发培训