Submission #1063393

#TimeUsernameProblemLanguageResultExecution timeMemory
1063393ThylOnePower 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 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){ re = max(re, solve(1,v,node) - malus); sum += solve(1,v,node); } re = max(re, sum-malus); return dp[1][node] = re; }else{ int re = (isPowerPlant[node]); int sum = 0; for(int v:links[node])if(dad!=v){ re = max(re, solve(0,v,node)); sum += solve(1,v,node); } re = max(re, sum); 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'); int ans = max(solve(0,0),solve(1,0)); for(int i = 0;i<1;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...