Submission #886641

#TimeUsernameProblemLanguageResultExecution timeMemory
886641stefanneaguPower Plant (JOI20_power)C++17
47 / 100
70 ms14952 KiB
#include <bits/stdc++.h>

using namespace std;

const int nmax = 1e5 + 1;

int v[nmax], dp[nmax], ans;
bool f[nmax];
vector<vector<int>> adj(nmax);

void dfs(int i, int tata) {
  for(auto fiu : adj[i]) {
    if(fiu != tata) {
      dfs(fiu, i);
    }
  }
  int sum = 0, maxx = 0;
  for(auto fiu : adj[i]) {
    sum += dp[fiu];
    maxx = max(maxx, dp[fiu]);
  }
  if(f[i]) {
    ans = max({ans, maxx + 1, sum - 1});
  } else {
    ans = max({ans, maxx, sum});
  }
  dp[i] = max(f[i] * 1, sum - f[i]);
}

int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie();
  cout.tie();
  int n;
  cin >> n;
  adj.resize(n + 1);
  for(int i = 1; i < n; i ++) {
    int a, b;
    cin >> a >> b;
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  for(int i = 1; i <= n; i ++) {
    char ch;
    cin >> ch;
    f[i] = ch - '0';
  }
  dfs(1, 0);
  cout << ans;
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...