//####################
//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 time |
Memory |
Grader output |
1 |
Correct |
2 ms |
4952 KB |
Output is correct |
2 |
Correct |
2 ms |
4956 KB |
Output is correct |
3 |
Correct |
2 ms |
4956 KB |
Output is correct |
4 |
Correct |
2 ms |
4956 KB |
Output is correct |
5 |
Correct |
2 ms |
4960 KB |
Output is correct |
6 |
Correct |
2 ms |
4956 KB |
Output is correct |
7 |
Correct |
2 ms |
4956 KB |
Output is correct |
8 |
Correct |
2 ms |
4956 KB |
Output is correct |
9 |
Correct |
2 ms |
5172 KB |
Output is correct |
10 |
Correct |
3 ms |
4956 KB |
Output is correct |
11 |
Correct |
2 ms |
4956 KB |
Output is correct |
12 |
Incorrect |
2 ms |
4956 KB |
Output isn't correct |
13 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
4952 KB |
Output is correct |
2 |
Correct |
2 ms |
4956 KB |
Output is correct |
3 |
Correct |
2 ms |
4956 KB |
Output is correct |
4 |
Correct |
2 ms |
4956 KB |
Output is correct |
5 |
Correct |
2 ms |
4960 KB |
Output is correct |
6 |
Correct |
2 ms |
4956 KB |
Output is correct |
7 |
Correct |
2 ms |
4956 KB |
Output is correct |
8 |
Correct |
2 ms |
4956 KB |
Output is correct |
9 |
Correct |
2 ms |
5172 KB |
Output is correct |
10 |
Correct |
3 ms |
4956 KB |
Output is correct |
11 |
Correct |
2 ms |
4956 KB |
Output is correct |
12 |
Incorrect |
2 ms |
4956 KB |
Output isn't correct |
13 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
4952 KB |
Output is correct |
2 |
Correct |
2 ms |
4956 KB |
Output is correct |
3 |
Correct |
2 ms |
4956 KB |
Output is correct |
4 |
Correct |
2 ms |
4956 KB |
Output is correct |
5 |
Correct |
2 ms |
4960 KB |
Output is correct |
6 |
Correct |
2 ms |
4956 KB |
Output is correct |
7 |
Correct |
2 ms |
4956 KB |
Output is correct |
8 |
Correct |
2 ms |
4956 KB |
Output is correct |
9 |
Correct |
2 ms |
5172 KB |
Output is correct |
10 |
Correct |
3 ms |
4956 KB |
Output is correct |
11 |
Correct |
2 ms |
4956 KB |
Output is correct |
12 |
Incorrect |
2 ms |
4956 KB |
Output isn't correct |
13 |
Halted |
0 ms |
0 KB |
- |