This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define FAST ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);cerr.tie(0)
#define mp make_pair
#define xx first
#define yy second
#define pb push_back
#define pf push_front
#define popb pop_back
#define popf pop_front
#define all(x) x.begin(),x.end()
#define ff(i,a,b) for (int i = a; i < b; i++)
#define fff(i,a,b) for (int i = a; i <= b; i++)
#define bff(i,a,b) for (int i = b-1; i >= a; i--)
#define bfff(i,a,b) for (int i = b; i >= a; i--)
using namespace std;
long double typedef ld;
unsigned int typedef ui;
long long int typedef li;
pair<int,int> typedef pii;
pair<li,li> typedef pli;
pair<ld,ld> typedef pld;
vector<vector<int>> typedef graph;
unsigned long long int typedef ull;
//const int mod = 998244353;
const int mod = 1000000007;
//Note to self: Check for overflow
graph g(200005);
bool struja[200005];
int dp[200005];
int ans=0;
void dfs(int p, int q)
{
int suma=0,mx=0;
for (auto it : g[p]) if (it!=q)
{
dfs(it,p);
suma+=dp[it];
mx=max(mx,dp[it]);
}
ans=max(ans,mx+struja[p]);
dp[p]=max(dp[p],suma-struja[p]);
if (struja[p]) dp[p]=max(dp[p],1);
ans=max(ans,dp[p]);
}
int main()
{
FAST;
int n; cin>>n;
ff(i,1,n)
{
int u,v; cin>>u>>v;
g[u].pb(v),g[v].pb(u);
}
string s; cin>>s;
fff(i,1,n) struja[i]=(s[i-1]=='1');
dfs(1,0);
cout<<ans<<"\n";
//fff(i,1,n) cout<<i<<": "<<dp[i]<<endl;
}
//Note to self: Check for overflow
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |