Submission #837182

#TimeUsernameProblemLanguageResultExecution timeMemory
837182ymmThousands Islands (IOI22_islands)C++17
3.50 / 100
27 ms6856 KiB
#include "islands.h" #include <bits/stdc++.h> #define Loop(x,l,r) for (ll x = (l); x < (r); ++x) typedef long long ll; using namespace std; const int N = 100'010; int height[N], mnup[N]; vector<int> A[N]; bool vis[N]; bool anc[N]; int cnt[N]; int kooft[N]; void dfs1(int v, int h) { vis[v] = 1; anc[v] = 1; height[v] = h; mnup[v] = N; for (int u : A[v]) { if (anc[u]) { mnup[v] = min(mnup[v], height[u]); kooft[u]--; } if (vis[u]) continue; dfs1(u, h+1); mnup[v] = min(mnup[v], mnup[u]); } anc[v] = 0; } void make_count() { vector<int> vec = {0}; cnt[0] = 1; while (vec.size()) { int v = vec.back(); vec.pop_back(); vis[v] = 1; for (int u : A[v]) { if (!vis[u]) { cnt[u] += cnt[v]; //cnt[u] = min(cnt[u], 2); if (!--kooft[u]) vec.push_back(u); } } } } std::variant<bool, std::vector<int>> find_journey( int N, int M, std::vector<int> U, std::vector<int> V) { Loop (i,0,M) { A[U[i]].push_back(V[i]); kooft[V[i]]++; } dfs1(0, 0); memset(vis, 0, sizeof(vis)); Loop (i,0,N) make_count(); Loop (i,0,N) { if (cnt[i] >= 2 && mnup[i] <= height[i]) return true; } return false; }
#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...