제출 #1235730

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

const int N = 2e5 + 10;
int n, m, vis[N];
vector<int> g[N], V;
bool res[N];

vector<int> ans;
vector<int> path;
void get(int v){
    if (ans.size()) return ;
    if (g[v].size() >= 3 or (v == 0 and g[v].size() >= 2)){
        res[0] = 1;
        
        int prv = -1;
        if (path.size()) prv = path.back();

        int e1 = -1, e2 = -1;
        if (prv == -1){
            for (int e : g[v]){
                if (e1 == -1)
                    e1 = e;
                else
                    e2 = e;
            }
        }
        else{
            for (int e : g[v]){
                if (e == prv) continue;
                if (e == (prv ^ 1)) continue;
                if (e1 == -1) e1 = e;
                else e2 = e;
            }
        }

        ans = path;
        ans.push_back(e1);
        ans.push_back(e1 ^ 1);
        ans.push_back(e2);
        ans.push_back(e2 ^ 1);

        ans.push_back(e1 ^ 1);
        ans.push_back(e1);
        ans.push_back(e2 ^ 1);
        ans.push_back(e2);

        while (path.size()){
            ans.push_back(path.back());
            path.pop_back();
        }
        return ;
    }

    vis[v] = 1;
    for (int e : g[v]){
        int u = V[e];
        if (!vis[u]){
            path.push_back(e);
            if (ans.size()) return ;
            get(u);
            if (ans.size()) return ;
            path.pop_back();
        }
    }
}

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);
    }
    get(0);
    if (!res[0]) return false;
    else return ans;
}
#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...