제출 #758284

#제출 시각아이디문제언어결과실행 시간메모리
758284benjaminkleyn열쇠 (IOI21_keys)C++17
37 / 100
353 ms84404 KiB
#include "keys.h" #include <bits/stdc++.h> using namespace std; int n, m; vector<pair<int, int>> g[300000], temp[300000]; set<int> R[300000]; stack<int> stck; bool vis[300000]; void dfs1(int u) { vis[u] = true; for (auto [v, c] : g[u]) if (!vis[v] && R[u].find(c) != R[u].end()) dfs1(v); stck.push(u); } int cmp[300000]; void dfs2(int u, int rep) { cmp[u] = rep, vis[u] = true; for (auto [v, c] : g[u]) if (!vis[v] && R[v].find(c) != R[v].end()) dfs2(v, rep); } bool compress() { bool found = false; for (int i = 0; i < n; i++) { if (cmp[i] != cmp[cmp[i]]) found = true; cmp[i] = cmp[cmp[i]]; } for (int u = 0; u < n; u++) { temp[u] = g[u]; g[u] = vector<pair<int, int>>(); } for (int u = 0; u < n; u++) for (auto [v, k] : temp[u]) if (cmp[u] != cmp[v]) g[cmp[u]].push_back({cmp[v], k}); for (int i = 0; i < n; i++) if (cmp[i] != i) { for (int r : R[i]) R[cmp[i]].insert(r); R[i] = set<int>(); } return found; } vector<int> find_reachable(vector<int> r, vector<int> u, vector<int> v, vector<int> c) { n = r.size(), m = u.size(); for (int i = 0; i < n; i++) R[i] = {r[i]}; 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++) cmp[i] = i; while (true) { memset(vis, false, sizeof(vis)); for (int i = 0; i < n; i++) if (i == cmp[i] && !vis[i]) dfs1(i); memset(vis, false, sizeof(vis)); while (!stck.empty()) { if (!vis[stck.top()]) dfs2(stck.top(), stck.top()); stck.pop(); } if (!compress()) break; } vector<int> sz(n, 0); for (int i = 0; i < n; i++) sz[cmp[i]]++; vector<int> out(n, 0), ans(n, 0); int mn = INT_MAX; for (int i = 0; i < n; i++) if (i == cmp[i]) { for (auto [j, k] : g[i]) if (R[i].find(k) != R[i].end()) out[i]++; if (out[i] == 0) mn = min(mn, sz[i]); } for (int i = 0; i < n; i++) if (out[cmp[i]] == 0 && sz[cmp[i]] == mn) ans[i] = 1; return ans; }

컴파일 시 표준 에러 (stderr) 메시지

keys.cpp: In function 'std::vector<int> find_reachable(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
keys.cpp:108:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
  108 |     for (int i = 0; i < n; i++)
      |     ^~~
keys.cpp:112:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
  112 |  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...