Submission #837495

#TimeUsernameProblemLanguageResultExecution timeMemory
837495fatemetmhr수천개의 섬 (IOI22_islands)C++17
24 / 100
35 ms12316 KiB
// Be name khoda //


#include "islands.h"
#include <bits/stdc++.h>

using namespace std;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

#define debug(x) cerr << "(" << (#x) << "): " << (x) << endl;
#define all(x)   x.begin(), x.end()
#define pb       push_back
#define mp       make_pair
#define fi       first
#define se       second

typedef long long ll;

const int mod   = 1e9 + 9;
const int maxn5 = 2e5 + 10;

vector <pair<int, int>> adj[maxn5];
int mark[maxn5], cyver2;
vector <int> ret;

bool dfs(int v){
    mark[v] = 1;
    for(auto [u, id] : adj[v]){
        if(!mark[u]){
            ret.pb(id);
            if(dfs(u))
                return true;
            ret.pop_back();
        }
        else if(mark[u] == 1){
            ret.pb(id);
            cyver2 = u;
            return true;
        }
    }
    mark[v] = 2;
    return false;
}


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++)
        adj[u[i]].pb({v[i], i});
    if(!dfs(0))
        return false;
    int ind = 0;
    while(u[ret[ind]] != cyver2)
        ind++;
    int ind2 = ret.size();
    for(int i = ind; i < ind2; i++)
        ret.pb(ret[i] ^ 1);
    for(int i = ind2 - 1; i >= ind; i--)
        ret.pb(ret[i]);
    for(int i = ind2 - 1; i >= ind; i--)
        ret.pb(ret[i] ^ 1);
    for(int i = ind - 1; i >= 0; i--)
        ret.pb(ret[i]);
    return ret;
}

#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...