Submission #1236477

#TimeUsernameProblemLanguageResultExecution timeMemory
1236477Ghulam_JunaidThousands Islands (IOI22_islands)C++20
11.90 / 100
28 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; } vector<int> start_path; int start = 0; int ite = 0; while (out_deg[start] == 1){ ite++; dead[start] = 1; out_deg[start] = 0; for (int e : rev[start]){ int u = U[e]; out_deg[u]--; if (out_deg[u] == 0) dead[u] = 1; } int e = g[start][0]; for (int i = 0; i < g[start].size(); i ++) if (!dead[V[g[start][i]]]) e = g[start][i]; int nxt = V[g[start][e]]; start_path.push_back(e); start = nxt; if (dead[start]) 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...