Submission #1247305

#TimeUsernameProblemLanguageResultExecution timeMemory
1247305tralalero_tralalaPower Plant (JOI20_power)C++20
47 / 100
1597 ms79504 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 GLcc = 0;

vi adj[N];
map<ii,lli> dp;
map<ii,lli> vis;

lli n;
char s[N];

lli dfs(lli u, lli p){
  lli& mem = vis[ii{u, p}];
  lli& res = dp[ii{u, p}];
  if (mem == 0){
    GLcc++;
    mem = 1;
    lli ans = 0;
    for (auto & i : adj[u]) if (i != p) ans += dfs(i, u);
    // cout << u+1 << ": " << max(ans - lli(s[u] - '0'), lli(s[u] - '0')) << endl;
    res = max(ans - lli(s[u] - '0'), lli(s[u] - '0'));
  }
  return res;
}

lli calc(lli u){
  lli ans = 0, cc = 0;
  for (auto & i : adj[u]){
    lli xx = dfs(i, u);
    if (xx >= 1) cc++;
    ans += xx;
  }
  return ans + (cc > 1 ? -1 : +1);
}

void solve(){
  cin >> n;
  fore(i,1,n){
    lli a, b; cin >> a >> b; a--, b--;
    adj[a].pb(b);
    adj[b].pb(a);
  }
  fore(i,0,n) cin >> s[i];
  lli ans = 0;
  fore(i,0,n) if (s[i] == '1'){
    ans = max(calc(i), ans);
    // return;
  }
  cout << ans << ENDL;
  // deb(GLcc);
}
 
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...