제출 #1235676

#제출 시각아이디문제언어결과실행 시간메모리
1235676Ghulam_Junaid수천개의 섬 (IOI22_islands)C++20
10.15 / 100
23 ms5704 KiB
#include <bits/stdc++.h>
#include "islands.h"
// #include "grader.cpp"
using namespace std;

const int N = 1e3 + 10;
int n, m, vis[N], bad[N], good[N], source;
vector<int> g[N], V;
vector<int> seen;
bool res[N];

bool dfs(int v){
    if (good[v] or v == source) return 1;
    if (bad[v]) return 0;

    seen.push_back(v);
    vis[v] = 1;
    bool ans = 0;
    for (int e : g[v]){
        int u = V[e];
        if (vis[u] == 2) continue;
        if (vis[u] == 1) ans = 1;
        else ans |= dfs(u);
    }
    vis[v] = 2;
    if (ans) good[v] = 1;
    else bad[v] = 1;
    return ans;
}

void get(int v){
    res[0] |= res[v];
    vis[v] = 1;
    for (int e : g[v]){
        int u = V[e];
        if (!vis[u])
            get(u);
    }
}

variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> vv) {
    V = vv;
    n = N, m = M;
    for (int i = 0; i < m; i ++){
        g[U[i]].push_back(i);
    }
    for (int v = 0; v < n; v ++){
        int ans = 0;
        for (int e : g[v]){
            source = v;
            ans += dfs(V[e]);
            for (int x : seen)
                vis[x] = 0;
            seen.clear();
            if (ans >= 2){
                res[v] = 1;
                break;
            }
        }
    }
    memset(vis, 0, sizeof vis);
    get(0);
    return res[0];
}
#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...