Submission #1233520

#TimeUsernameProblemLanguageResultExecution timeMemory
1233520TimoshKeys (IOI21_keys)C++20
37 / 100
3094 ms24780 KiB
#include <bits/stdc++.h>

using namespace std;

vector<int> find_reachable(vector<int> r, vector<int> u, vector<int> v, vector<int> c)
{
	int n = r.size();
	int m = c.size();
	int mn = n + 1;
	vector<int> ans(n);
	vector<vector<pair<int, int>>> g(n);
	for (int i = 0; i < m; i++)
		g[u[i]].push_back({v[i], c[i]}), g[v[i]].push_back({u[i], c[i]});
	for (int i = 0; i < n; i++)
	{
		vector<int> vis(n), colvis(n);
		vector<vector<int>> col(n);
		queue<int> q;
		q.push(i);
		while (!q.empty())
		{
			int x = q.front();
			q.pop();
			if (vis[x])
				continue;
			vis[x] = 1;
			for (auto &y : g[x])
			{
				if (colvis[y.second] || r[x] == y.second)
					q.push(y.first);
				else
					col[y.second].push_back(y.first);
			}
			if (colvis[r[x]])
				continue;
			colvis[r[x]] = 1;
			for (auto &y : col[r[x]])
				if (!vis[y])
					q.push(y);
		}
		for (auto &j : vis)
			ans[i] += j;
	}
	mn = *min_element(ans.begin(), ans.end());
	for (int i = 0; i < n; i++)
		ans[i] = mn == ans[i];
	return ans;
}
#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...