Submission #633905

#TimeUsernameProblemLanguageResultExecution timeMemory
633905CauchicoThousands Islands (IOI22_islands)C++17
22.75 / 100
32 ms5196 KiB
#include <variant>
#include <bits/stdc++.h>
using namespace std;
 
vector<vector<pair<int,int>>> adj;
vector<int> path,cycle; 
vector<bool> used;
 
void dfs(int v, int e) {
    used[v] = true;
    if (adj[v].size() > 2) {
        int p1,p2;
        if (adj[v][0].first == e) {
            p1 = adj[v][1].second;
            p2 = adj[v][2].second;
        }else if (adj[v][1].first == e) {
            p1 = adj[v][0].second;
            p2 = adj[v][2].second;
        }else {
            p1 = adj[v][0].second;
            p2 = adj[v][1].second;
        }
        int b1=p1^1,b2=p2^1;
        cycle = {p1,b1,p2,b2,b1,p1,b2,p2};
        return;
    }
    for (auto u: adj[v]) {
        if (!used[u.first]) {
            path.push_back(u.second);
            dfs(u.first,v);
        }
    }
}
 
variant<bool,vector<int>> find_journey( int n, int m, vector<int> u, vector<int> v) {
    adj.resize(n); used.resize(n);
    for (int i=0;i<m;i++) {
        adj[u[i]].push_back({v[i],i});
    }
    if (adj[0].size() > 1) {
        int p1 = adj[0][0].second; int b1 = p1^1;
        int p2 = adj[0][1].second; int b2 = p2^1;
        vector<int> ans = {p1,b1,p2,b2,b1,p1,b2,p2};
        return ans;
    } else {
        dfs(0,-1);
        if (cycle.size() == 0) {
            return false;
        }
        vector<int> ans;
        ans.insert(ans.end(),path.begin(),path.end());
        ans.insert(ans.end(),cycle.begin(),cycle.end());
        reverse(path.begin(),path.end());
        ans.insert(ans.end(),path.begin(),path.end());
        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...