제출 #1056822

#제출 시각아이디문제언어결과실행 시간메모리
1056822vjudge1수천개의 섬 (IOI22_islands)C++17
8.40 / 100
23 ms6248 KiB
#include "islands.h"

#include <variant>
#include <vector>
#include <bits/stdc++.h>

using namespace std;

using vi = vector<int>;
using ii = pair<int, int>;

variant<bool, vi> find_journey(int n, int m, vi U, vi V) {
    vi InDeg(n, 0), OutDeg(n, 0);
    vector<vector<ii> > L(n);
    for(int i = 0; i < m; ++i) {
        L[U[i]].push_back({V[i], i});
        ++OutDeg[U[i]];
        ++InDeg[V[i]];
    }
    bool ok = false;
    vi viz(n, 0);
    stack<ii> S;
    vi Re;
    function<void(int, int, int)> dfs = [&](int u, int p, int parc) {
        if(ok) return;
        if(viz[u] == 2) return;
        if(viz[u] == 1) {
            vector<ii> Cic;
            while(!S.empty() && S.top().first != u) {
                Cic.push_back(S.top());
                S.pop();
            }
            reverse(Cic.begin(), Cic.end());
            Cic.push_back({u, parc});
            vector<ii> Rest;
            while(!S.empty()) {
                Rest.push_back(S.top());
                S.pop();
            }
            vi Sol;
            reverse(Rest.begin(), Rest.end());
            for(auto it : Rest)
                Sol.push_back(it.second);
            for(auto it : Cic)
                Sol.push_back(it.second);
            for(auto it : Cic)
                Sol.push_back(it.second ^ 1);
            reverse(Cic.begin(), Cic.end());
            for(auto it : Cic)
                Sol.push_back(it.second);
            for(auto it : Cic)
                Sol.push_back(it.second ^ 1);
            reverse(Rest.begin(), Rest.end());
            for(auto it : Rest)
                Sol.push_back(it.second);
            Re = Sol;
            ok = 1;
            return;
        }
        if(parc != -1)
            S.push({u, parc});
        viz[u] = 1;
        int nrf = 0;
        vector<ii> Fii;
        for(auto [it, nrc] : L[u]) {
            dfs(it, u, nrc);
        }
        viz[u] = 2;
    };
    dfs(0, -1, -1);
    if(ok && !Re.empty()) return Re;
    return ok;
}

컴파일 시 표준 에러 (stderr) 메시지

islands.cpp: In lambda function:
islands.cpp:63:13: warning: unused variable 'nrf' [-Wunused-variable]
   63 |         int nrf = 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...