Submission #1235927

#TimeUsernameProblemLanguageResultExecution timeMemory
1235927Ghulam_Junaid수천개의 섬 (IOI22_islands)C++20
10.15 / 100
30 ms17224 KiB
#include <bits/stdc++.h> #include "islands.h" // #include "grader.cpp" using namespace std; const int N = 2e5 + 10; int n, m, out_deg[N], dead[N]; vector<int> g[N], rev[N], U, V; variant<bool, vector<int>> find_journey(int N, int M, vector<int> uu, vector<int> vv) { V = vv, U = uu; n = N, m = M; for (int i = 0; i < m; i ++){ g[U[i]].push_back(i); out_deg[U[i]]++; rev[V[i]].push_back(i); } queue<int> q; for (int i = 0; i < n; i ++) if (!out_deg[i]) q.push(i); while (!q.empty()){ int v = q.front(); q.pop(); dead[v] = 1; for (int e : rev[v]){ int u = U[e]; out_deg[u]--; if (!out_deg[u]) q.push(u); } } if (dead[0]) return false; for (int v = 0; v < n; v ++){ vector<int> adj; for (int e : g[v]){ int u = V[e]; if (!dead[u] and !dead[v]) adj.push_back(e); } g[v] = adj; adj.clear(); for (int e : rev[v]){ int u = U[e]; if (!dead[u] and !dead[v]) adj.push_back(e); } rev[v] = adj; } int start = 0; while (out_deg[start] == 1){ int e = g[start][0]; int nxt = V[e]; start = nxt; if (start == 0) break; } if (out_deg[start] <= 1) return false; return true; }
#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...