Submission #1183561

#TimeUsernameProblemLanguageResultExecution timeMemory
1183561PagodePaivaThousands Islands (IOI22_islands)C++20
9.10 / 100
19 ms5192 KiB
#include "islands.h"
#include<bits/stdc++.h>
#include <variant>
#include <vector>

using namespace std;

// se 0 tem grau 2 -> ok
// se 0 tem grau 0 -> ruim
// se 0 tem grau 1 
//      se tem alguma backedge -> ok
//      se tem alguem de grau 2 -> ok
//      se nao -> ruim
const int N = 1010;
const int M = 200010;
vector <pair <int, int>> g[N];
int mark[M];
int mark_ver[N];
vector <int> res;
bool calc = false;

void app(vector <int> v){
    for(auto x : v)
        res.push_back(x);
    return;
}

void dfs(int v, int p, int idx){
    mark_ver[v] = 1;
    mark[idx/2] = 1;
    vector <int> cnt;    
    if(!calc) res.push_back(idx);
    for(auto [x, i] : g[v]){
        if(mark[i/2])
            continue;
        cnt.push_back(i);
        if(cnt.size() > 1 and !calc){
            calc = true;
            vector <int> ap = res;
            reverse(ap.begin(), ap.end());
            int a = cnt[0], b = cnt[0]^1, c = cnt[1], d = cnt[1]^1;
            app({a, b, c, d, b, a, d, c});
            app(ap);
            return;
        }
    }
    for(auto [x, i] : g[v]){
        if(mark[i/2])
            continue;
        dfs(x, v, i);
    }
    if(!calc) res.pop_back();
    return;
}

std::variant<bool, std::vector<int>> find_journey(
    int N, int m, std::vector<int> U, std::vector<int> V) {
    for(int i = 0;i < m;i++){
        g[U[i]].push_back({V[i], i});

    }  
    if(g[0].size() >= 2){
        int a = g[0][0].second, c = g[0][1].second;
        int b = a^1, d = c^1;
        app({a, b, c, d, b, a, d, c});
        return res;
    }
    dfs(0, 0, M-1);
    if(calc) return res;
    return calc;
}
#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...