제출 #1325309

#제출 시각아이디문제언어결과실행 시간메모리
1325309tralalero_tralalaPower Plant (JOI20_power)C++20
47 / 100
1596 ms39628 KiB
#include <bits/stdc++.h>
#define _ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fore(i,a,b) for(lli i = (a), abcdxd = (b); i < abcdxd; i++)
#define f first
#define s second
#define pb push_back
#define ENDL '\n'
#define sz(s) lli((s).size())
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
using namespace std;
typedef long long lli;
typedef pair<lli,lli> ii;
typedef vector<lli> vi;
typedef vector<ii> vii;
typedef long double ld;
#define deb(x) cout << #x << ": " << x << endl;

const lli N = 2e5 + 12;

lli n;

vii adj[N];
bool pw[N];

lli dp[N+N];
bool vis[N+N];

// vii rev;

lli calc(lli u, lli p, lli id){
  lli& ans = dp[id];
  bool& mem = vis[id];
  if (!mem){
    mem = true;
    ans = 0;
    vi v; for (auto i : adj[u]) if (i.f != p) v.pb(calc(i.f, u, i.s));
    lli sum = 0;
    for (auto i : v) sum += i;
    ans = max(lli(pw[u]), sum - pw[u]);
    // cout << id << ": " << ans << endl;
    // rev.pb({id, ans});
  }
  return ans;
}

lli f(lli u){
  // deb(u);
  lli ans = 1;
  vi v; for (auto i : adj[u]) v.pb(calc(i.f, u, i.s));
  lli sum = -1;
  for (auto x : v){
    sum += x;
    ans = max(ans, x + 1ll);
  }
  return max(ans, sum - 1ll);
}

void solve(){
  cin >> n;
  fore(i,0,n-1){
    lli a, b; cin >> a >> b; a--, b--;
    adj[a].pb({b, i+i});
    adj[b].pb({a, i+i+1});
  }
  fore(i,0,n){
    char c; cin >> c;
    pw[i] = (c == '1');
  }
  lli ans = 0;
  fore(i,0,n) if (pw[i]) ans = max(ans, f(i));
  cout << ans << endl;
  // sort(all(rev)); for (auto i : rev) cout << i.f << ": " << i.s << endl;
}

int main(){ // _
  // freopen("tracing.in", "r", stdin);
  // freopen("tracing.out", "w", stdout);
  // lli t; cin >> t;
  // while (t--)
    solve();
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...