Submission #1236511

#TimeUsernameProblemLanguageResultExecution timeMemory
1236511Ghulam_JunaidThousands Islands (IOI22_islands)C++20
1.75 / 100
26 ms16580 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;
    }
    
    int start = 0;
    while (1){        
        dead[start] = 1;
        int outd = 0, nxt = -1;

        for (int e : rev[start]){
            int u = U[e];
            out_deg[u]--;
            if (out_deg[u] == 0)
                dead[u] = 1;
        }

        for (int e : g[start]){
            int u = V[e];
            if (dead[u]) continue;
            outd++;
            nxt = u;
        }

        if (outd == 0) return false;
        if (outd > 1) return true;
        start = nxt;
        if (dead[start]) 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...