#include <vector>
#include <map>
#include <queue>
#include <set>
using namespace std;
vector<pair<int,int>> adj[300000];
vector<int> find_reachable(vector<int> r, vector<int> u, vector<int> v, vector<int> c) {
vector<int> tot(r.size(), 0);
for (int i = 0; i < u.size(); i++) {
adj[u[i]].emplace_back(v[i], c[i]);
adj[v[i]].emplace_back(u[i], c[i]);
}
for (int i = 0; i < r.size(); i++) {
queue<int> q;
q.push(i);
map<int, vector<int>> mp;
set<int> keys;
vector<bool> vis(r.size(), 0);
for (; !q.empty(); q.pop()) {
int current = q.front();
if (vis[current]) continue;
vis[current] = true;
keys.insert(r[current]);
for (auto child : mp[r[current]]) {
q.push(child);
}
tot[i]++;
for (auto [child, key] : adj[current]) {
if (vis[child]) continue;
if (keys.contains(key)) {
q.push(child);
} else {
mp[key].push_back(child);
}
}
}
}
int smallest = 1000000000;
for (int i = 0; i < r.size(); i++) {
if (tot[i] == 0) tot[i]++;
smallest = min(smallest, tot[i]);
}
vector<int> ans(r.size(), 0);
for (int i = 0; i < r.size(); i++) {
if (tot[i] == smallest) {
ans[i] = 1;
}
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |