Submission #1235924

#TimeUsernameProblemLanguageResultExecution timeMemory
1235924Ghulam_Junaid수천개의 섬 (IOI22_islands)C++20
1.75 / 100
27 ms17088 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 u : rev[v]){
            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 u : g[v])
            if (!dead[u] and !dead[v]) adj.push_back(u);
        g[v] = adj;

        adj.clear();
        for (int u : rev[v])
            if (!dead[u] and !dead[v]) adj.push_back(u);
        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...