제출 #1326176

#제출 시각아이디문제언어결과실행 시간메모리
1326176JuanJLPower Plant (JOI20_power)C++20
47 / 100
148 ms720 KiB
#include <bits/stdc++.h> #define fst first #define snd second #define pb push_back #define mset(a,v) memset(a,v,sizeof(a)) #define SZ(x) (int)x.size() #define ALL(x) x.begin(),x.end() #define forn(i,a,b) for(int i = a; i<b; i++) #ifdef D #define debug(x) cout << x #else #define debug(x) //nothing #endif using namespace std; typedef long long ll; const int MAXN = 2000+5; ll n; vector<ll> adj[MAXN]; bool is[MAXN]; ll dp[MAXN][3]; ll f(ll nd , ll t, ll p){ ll &res = dp[nd][t]; if(res!=-1) return res; if(is[nd]){ res=1; }else res=0; if(t==0){ ll pres = 0; for(auto i:adj[nd]) if(i!=p){ pres+=f(i,0,nd); } res=max(res,pres- (is[nd]?1:0)); }else{ ll best = 0; for(auto i:adj[nd]) if(i!=p){ best=max(best,f(i,0,nd)); } res=max(res,best+(is[nd]?1:0)); } debug(" "<<nd<<" "<<p<<" "<<res<<'\n'); return res; } int main(){ cin>>n; ll u,v; forn(i,0,n-1){ cin>>u>>v; u--; v--; adj[u].pb(v); adj[v].pb(u); } string s; cin>>s; forn(i,0,n) is[i]=(s[i]=='1'); ll res = 1; forn(i,0,n){ debug("raiz "<<i<<"----------------\n"); mset(dp,-1); res=max(res, f(i,0,-1)); mset(dp,-1); res=max(res, f(i,1,-1)); } cout<<res<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...