Submission #1187883

#TimeUsernameProblemLanguageResultExecution timeMemory
1187883_ncng.nyrSynchronization (JOI13_synchronization)C++20
0 / 100
8095 ms15688 KiB
#include<bits/stdc++.h>

using namespace std;

const int N = 1e5 + 5;

int n, m, k, timer;
int in[N], out[N], rev[N], state[N], ans[N], boss[N], par[N], pre[N];
pair<int, int> e[N];
vector<int> ad[N];
map<pair<int, int>, bool> del;

void dfs (int u, int p) {
  in[u] = ++timer;
  rev[timer] = u;
  for (auto v : ad[u]) if (v != p) {
    par[v] = u;
    dfs(v, u);
  }
  out[u] = timer;
}

int root (int v) {
  while (par[v] != v) v = par[v];
  return v;
}

int32_t main() {
  cin.tie(0) -> sync_with_stdio(0);

  #define task "Synchronization"

  if (fopen ("task.inp", "r")) {
    freopen ("task.inp", "r", stdin);
    freopen ("task.out", "w", stdout);
  }

  if (fopen (task".inp", "r")) {
    freopen (task".inp", "r", stdin);
    freopen (task".out", "w", stdout);
  }

  cin >> n >> m >> k;
  for (int i = 1; i < n; ++i) {
    int u, v; cin >> u >> v;
    ad[u].push_back(v);
    ad[v].push_back(u);
    e[i] = {u, v};
  }
  dfs(1, 0);

  for (int i = 1; i < n; ++i) {
    auto [u, v] = e[i];
    if (in[u] > in[v]) swap(u, v);
    e[i] = {u, v};
  }

  for (int i = 1; i <= n; ++i) ans[i] = 1, par[i] = i;

  for (int i = 1; i <= m; ++i) {
    int id; cin >> id;
    state[id] ^= 1;
    auto [u, v] = e[id];

    if (state[id]) {
      int head = root(u),
          res = ans[head] + ans[v] - pre[id];
      ans[head] = ans[v] = res;
      par[v] = u;
    }
    else {
      int head = root(u);
      pre[id] = ans[head];
      ans[v] = ans[head]; par[v] = v;
    }
  }

  while (k--) {
    int u; cin >> u;
    cout << ans[u] << '\n';
  }
}

Compilation message (stderr)

synchronization.cpp: In function 'int32_t main()':
synchronization.cpp:34:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |     freopen ("task.inp", "r", stdin);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
synchronization.cpp:35:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   35 |     freopen ("task.out", "w", stdout);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
synchronization.cpp:39:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   39 |     freopen (task".inp", "r", stdin);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
synchronization.cpp:40:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |     freopen (task".out", "w", stdout);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...