Submission #706529

#TimeUsernameProblemLanguageResultExecution timeMemory
706529danikoynovThousands Islands (IOI22_islands)C++17
35 / 100
170 ms22988 KiB
#include "islands.h" #include <variant> #include <vector> #include <queue> #include <iostream> using namespace std; const int maxn = 1e5 + 10; int seen[maxn], in_deg[maxn], out_deg[maxn]; int n, m; vector < int > links[maxn], rev_links[maxn]; vector < pair < int, int > > graph[maxn]; vector < int > path[3]; int clear_useless() { queue < int > q; for (int i = 0; i < n; i ++) { if (!out_deg[i]) q.push(i); } int start = 0; while(!q.empty() || out_deg[start] <= 1) { if (!q.empty()) { int node = q.front(); q.pop(); seen[node] = -1; for (int dest : rev_links[node]) { out_deg[dest] --; if (out_deg[dest] == 0) q.push(dest); } } while(out_deg[start] <= 1) { seen[start] = -1; out_deg[start] = 0; for (int dest : rev_links[start]) { out_deg[dest] --; if (out_deg[dest] == 0) q.push(dest); } pair < int, int > nxt = make_pair(-1, 0); for (pair < int, int > cur : graph[start]) { if (seen[cur.first] != -1) { nxt = cur; break; } } if (nxt.first == -1) return -1; start = nxt.first; path[2].push_back(nxt.second); } } return start; } std::variant<bool, std::vector<int>> find_journey(int N, int M, std::vector<int> U, std::vector<int> V) { n = N; m = M; for (int i = 0; i < M; i ++) { links[U[i]].push_back(V[i]); rev_links[V[i]].push_back(U[i]); in_deg[V[i]] ++; out_deg[U[i]] ++; graph[U[i]].push_back({V[i], i}); } int root = clear_useless(); if (root < 0) return false; ///cout << " root " << root << endl; ///dfs(start, 0, start); 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...