1 条题解
-
0
#include<bits/stdc++.h> using namespace std; #define int long long #define PII pair<int,int> #define fi first #define se second const int N=3e5+10; vector<PII>G[N]; int dp[N][2],a[N]; void dfs(int x,int f) { vector<int>res;int sum=0; for(auto i:G[x])if(i.fi!=f) { int y=i.fi,w=i.se; dfs(y,x); sum+=dp[y][0]; if(a[y])res.push_back(max(0ll,dp[y][1]+w-dp[y][0])); else res.push_back(0); } sort(res.begin(),res.end(),[](int x,int y){return x>y;}); int sum1=0,siz1=0;dp[x][0]=dp[x][1]=sum; for(int y:res) { siz1++;sum1+=y; if(siz1<=a[x]-1)dp[x][1]=max(dp[x][1],sum1+sum); if(siz1<=a[x])dp[x][0]=max(dp[x][0],sum1+sum); } } signed main() { int n;cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<n;i++) { int x,y,c;cin>>x>>y>>c; G[x].push_back({y,c}); G[y].push_back({x,c}); } dfs(1,0); cout<<dp[1][0]; return 0; }
- 1
信息
- ID
- 10055
- 时间
- 3000ms
- 内存
- 1024MiB
- 难度
- 6
- 标签
- 递交数
- 41
- 已通过
- 12
- 上传者