Submission #631972

#TimeUsernameProblemLanguageResultExecution timeMemory
631972CyanForcesThousands Islands (IOI22_islands)C++17
35 / 100
309 ms32212 KiB
#include "islands.h" #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for(int i = a; i < (b); ++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() #define debug(...) //ignore typedef long long ll; typedef pair<int, int> pii; typedef vector<int> vi; typedef long double ld; variant<bool, vi> find_journey(int n, int m, vi u, vi v) { vi dead(n); vector<set<int>> rg(n), g(n); rep(i,0,m) { g[u[i]].emplace(i); rg[v[i]].emplace(i); } queue<int> q; rep(x,0,n) if(sz(g[x]) == 0) q.emplace(x); auto del = [&](int e) { g[u[e]].erase(e); rg[v[e]].erase(e); if(sz(g[u[e]]) == 0) q.emplace(u[e]); }; auto trim = [&]() { while(sz(q)) { int x = q.front(); q.pop(); dead[x] = true; vi es(all(rg[x])); for(int e : es) del(e); } }; trim(); if(dead[0]) return false; vi pth; int x = 0; int lst_e = -1; while(sz(g[x]) == 1) { assert(!dead[x]); pth.emplace_back(x); vi es(all(rg[x])); for(int e : es) if(e != lst_e) del(e); trim(); if(dead[0]) return false; int e = *g[x].begin(); x = v[e]; lst_e = e; } assert(!dead[x]); assert(sz(g[x]) >= 2); 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...