Submission #1195581

#TimeUsernameProblemLanguageResultExecution timeMemory
1195581Marco_EscandonPower Plant (JOI20_power)C++20
100 / 100
192 ms51676 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; #define x first #define y second string s; vector<ll> cad[200001],asd(200001,0); vector<vector<ll>>dp; ll dfs(ll node, ll pl, ll padre) { if(dp[node][pl]!=-1) return dp[node][pl]; vector<ll> temp; ll bs=asd[node]; dp[node][pl]=asd[node]; ll asdf=0; for(auto i:cad[node]) { if(i==padre) continue; temp.push_back(dfs(i,1,node)); bs=max(dfs(i,0,node),bs); } sort(temp.begin(),temp.end()); reverse(temp.begin(),temp.end()); ll o1=0; for(auto i:temp) if(i>0)o1+=i; if(pl==0) { dp[node][pl]=max(o1-asd[node],dp[node][pl]); dp[node][pl]=max(bs,dp[node][pl]); if(temp.size()>0) dp[node][pl]=max(temp[0]+asd[node],dp[node][pl]); } else { dp[node][pl]=max(o1-asd[node],dp[node][pl]); } return dp[node][pl]; } int main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);cout.setf(ios::fixed);cout.precision(0); ll n; cin>>n; for(int i=0; i<n-1; i++) { ll a,b; cin>>a>>b; cad[a].push_back(b); cad[b].push_back(a); } cin>>s; for(int i=0; i<n; i++) asd[i+1]=(ll)s[i]-'0'; dp.assign(n+1,vector<ll>(3,-1)); cout<<dfs(1,0,0)<<"\n"; //for(int i=1; i<=n; i++) //{ // cout<<i<<": "<<dp[i][0]<<" "<<dp[i][1]<<"\n"; //} }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...