Submission #1356624

#TimeUsernameProblemLanguageResultExecution timeMemory
1356624Jawad_Akbar_JJKeys (IOI21_keys)C++20
37 / 100
3095 ms28444 KiB
#include <queue>

using namespace std;
const int N = 1<<19;
vector<pair<int, int>> nei[N];
int pres[N], seen[N];
vector<int> vec[N];

vector<int> find_reachable(vector<int> r, vector<int> U, vector<int> V, vector<int> c){
	int n = r.size(), m = c.size();

	for (int i=0;i<m;i++){
		nei[U[i]].push_back({V[i], c[i]});
		nei[V[i]].push_back({U[i], c[i]});
	}

	vector<int> ans1, ans2(n, 0);
	for (int i=0, mn = n + 1, sz;i<n;i++){
		vector<int> vC, vV;

		queue<int> Q;
		Q.push(i), seen[i] = 1, sz = 0;

		while (Q.size() > 0){
			int u = Q.front();
			Q.pop();
			pres[r[u]] = 1, sz++;
			vV.push_back(u);
			vC.push_back(r[u]);

			while (vec[r[u]].size() > 0){
				if (!seen[vec[r[u]].back()])
					Q.push(vec[r[u]].back()), seen[vec[r[u]].back()] = 1;
				vec[r[u]].pop_back();
			}

			for (auto [v, cl] : nei[u]){
				if (pres[cl] and !seen[v])
					Q.push(v), seen[v] = 1;
				else if (!pres[cl])
					vec[cl].push_back(v);
				vC.push_back(cl);
			}
		}

		if (sz < mn)
			mn = sz, ans1.clear();
		if (sz == mn)
			ans1.push_back(i);

		for (int j : vV)
			seen[j] = 0;
		for (int j : vC)
			pres[j] = 0, vec[j].clear();
	}
	for (int i : ans1)
		ans2[i] = 1;
	return ans2;
}
#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...