제출 #1062843

#제출 시각아이디문제언어결과실행 시간메모리
1062843fv3열쇠 (IOI21_keys)C++17
37 / 100
3050 ms27900 KiB
#include "keys.h" #include <bits/stdc++.h> using namespace std; int N, M; vector<vector<pair<int, int>>> adj; vector<int> R, C; vector<int> visited; int find_size(int index) { set<int> keys; map<int, vector<int>> locked; vector<int> visited(N); stack<int> stck; stck.push(index); int cnt = 0; while (!stck.empty()) { int s = stck.top(); stck.pop(); if (visited[s]) continue; visited[s] = 1; cnt++; if (!keys.count(R[s])) { keys.insert(R[s]); for (auto node : locked[R[s]]) { if (!visited[node]) stck.push(node); } } for (auto node : adj[s]) { if (visited[node.first]) continue; if (keys.count(node.second)) stck.push(node.first); else locked[node.second].push_back(node.first); } } return cnt; } vector<int> find_reachable(vector<int> r, vector<int> u, vector<int> v, vector<int> c) { R = r; C = c; N = r.size(); M = u.size(); adj = vector<vector<pair<int, int>>>(N); for (int i = 0; i < M; i++) { adj[u[i]].push_back({v[i], c[i]}); adj[v[i]].push_back({u[i], c[i]}); } vector<int> sz(N); int mn_sz = 1 << 30; for (int i = 0; i < N; i++) { sz[i] = find_size(i); mn_sz = min(mn_sz, sz[i]); } vector<int> ans(N); for (int i = 0; i < N; i++) ans[i] = (sz[i] == mn_sz); 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...