Submission #1063378

#TimeUsernameProblemLanguageResultExecution timeMemory
1063378ThylOnePower Plant (JOI20_power)C++14
0 / 100
2 ms5176 KiB
//#################### //PowerPlant //#################### #include<bits/stdc++.h> using namespace std; const int maxiN = 2*1e5; bool isPowerPlant[maxiN]; vector<int> links[maxiN]; int dp[2][maxiN]; int solve(bool cm,int node,int dad=-1){ if(dp[cm][node]!=-1)return dp[cm][node]; int re = 0; if(isPowerPlant[node])re=1; int malus = (cm && isPowerPlant[node]?1:0); for(int v:links[node])if(v!=dad){ re = max(re, solve(false,v,node) - malus); } int sum = 0; for(int v:links[node])if(v!=dad){ sum += solve(true,v,node); } sum -=malus; // le malus prcq ça va se faire péter return dp[cm][node] = max(re,sum) ; } signed main(){ ios::sync_with_stdio(false); int n;cin>>n; for(int i = 1;i<n;i++){ int a,b;cin>>a>>b; a--; b--; links[a].push_back(b); links[b].push_back(a); } fill(dp[0],dp[0]+n,-1); fill(dp[1],dp[1]+n,-1); string binary;cin>>binary; for(int i= 0;i<n;i++)isPowerPlant[i] = (binary[i]=='1'); int ans = solve(0,0); for(int i = 0;i<n;i++){ if(isPowerPlant[i]){ for(int v:links[i])if(v!=i){ ans = max(ans, 1+solve(1,v,i)); } } } cout<<ans<<endl; return 0; };
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...