Submission #1063400

#TimeUsernameProblemLanguageResultExecution timeMemory
1063400ThylOnePower Plant (JOI20_power)C++14
0 / 100
3 ms5172 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 ans = 0; int solve(bool cm,int node,int dad=-1){ if(dp[cm][node]!=-1)return dp[cm][node]; if(cm){ //avec malus ! int malus = (cm && isPowerPlant[node]); int re = (isPowerPlant[node]); int sum = 0; for(int v:links[node])if(dad!=v){ ans = max(ans, solve(1,v,node)+1); re = max(re, solve(1,v,node) - malus); sum += solve(1,v,node); } re = max(re, sum-malus); ans = max(ans,re); return dp[1][node] = re; }else{ int re = (isPowerPlant[node]); int sum = 0; for(int v:links[node])if(dad!=v){ ans = max(ans, solve(1,v,node)+1); re = max(re, solve(0,v,node)); sum += solve(1,v,node); } re = max(re, sum); ans = max(ans,re); return dp[0][node] = re; } } 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'); solve(0,0); cout<<ans<<endl; return 0; };
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...