Submission #1369434

#TimeUsernameProblemLanguageResultExecution timeMemory
1369434avighnaKeys (IOI21_keys)C++20
37 / 100
3094 ms23660 KiB
#include <bits/stdc++.h>

using namespace std;

vector<int> find_reachable(vector<int> r, vector<int> u, vector<int> v, vector<int> c) {
  const int n = r.size(), m = u.size();
  vector<vector<pair<int, int>>> adj(n);
  for (int i = 0; i < m; ++i) {
    adj[u[i]].push_back({v[i], i}), adj[v[i]].push_back({u[i], i});
  }

  auto reachable = [&](int u) {
    vector<bool> have(n);
    vector<vector<int>> traverse_with(n);
    vector<bool> vis(n);
    queue<int> q;
    auto flush = [&](int k) {
			if (!have[k]) {
				return;
			}
      while (!traverse_with[k].empty()) {
        q.push(traverse_with[k].back());
        traverse_with[k].pop_back();
      }
    };
    q.push(u);
    while (!q.empty()) {
			int u = q.front();
			q.pop();
      if (vis[u]) {
        continue;
      }
      vis[u] = true;
      have[r[u]] = true;
      flush(r[u]);
			for (auto &[i, idx] : adj[u]) {
				traverse_with[c[idx]].push_back(i);
				flush(c[idx]);
			}
    }
		int ans = 0;
		for (int i = 0; i < n; ++i) {
			ans += vis[i];
		}
		return ans;
  };

	int mn = int(1e9);
	vector<int> ans;
	for (int i = 0; i < n; ++i) {
		int p = reachable(i);
		if (p < mn) {
			mn = p, ans = {i};
		} else if (p == mn) {
			ans.push_back(i);
		}
	}

	vector<int> ret(n);
	for (int &i : ans) {
		ret[i] = 1;
	}
	return ret;
}

#ifdef MACOS_LOCAL
#include "grader.cpp"
#endif
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...