Submission #1248538

#TimeUsernameProblemLanguageResultExecution timeMemory
124853812baaterKeys (IOI21_keys)C++20
37 / 100
3093 ms26272 KiB
#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 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...