Submission #652858

#TimeUsernameProblemLanguageResultExecution timeMemory
652858LoboThousands Islands (IOI22_islands)C++17
1.75 / 100
131 ms40676 KiB
#include "islands.h"
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define fr first
#define sc second

const int maxn = 2e5+10;
int n, m, tin[maxn], low[maxn], mark[maxn], iscyc[maxn], can0[maxn], timer;
vector<int> g[maxn], gt[maxn];
map<int,vector<int>> boats[maxn];
vector<int> cur, final;
int cycbeg = -1;
void dfs(int u, int ant) {
    mark[u] = 1;
    cur.pb(u);
    if(final.size()) return;

    for(auto v : g[u]) if(v != ant) {
        if(final.size()) return;
        if(mark[v]) {
            final = cur;
            cycbeg = v;
            return;
        }
        else dfs(v,u);
    }

}

void dfs0(int u) {
    can0[u] = 1;
    for(auto v : g[u]) {
        if(can0[v] == 0) dfs0(v);
    }
}

variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> V) {
    n = N;
    m = M;
    for(int i = 0; i < m; i++) {
        g[U[i]].pb(V[i]);
        gt[V[i]].pb(U[i]);
        boats[U[i]][V[i]].pb(i);
    }

    dfs(0,-1);
    dfs0(0);

    if(final.size()) {
        return true;
    }

    for(int i = 0; i < n; i++) {
        for(auto X : boats[i]) {
            if(X.sc.size() > 1 && can0[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...