Submission #1320458

#TimeUsernameProblemLanguageResultExecution timeMemory
1320458BigBadBullyThousands Islands (IOI22_islands)C++20
1.75 / 100
82 ms11884 KiB
#include "islands.h"

#include <bits/stdc++.h>
#define pii pair<int,int>
#define ff first
#define ss second
using namespace std;

variant<bool, vector<int>> find_journey(
    int n, int m, vector<int> u, vector<int> v) 
{
    vector<int> dumy = {0,0};
    vector<vector<pii>> graph(n);
    set<pii> seen;
    for(int i = 0; i < m; i++)
    {
        if(seen.count({u[i],v[i]}))return dumy;
        seen.insert({u[i],v[i]});
        graph[u[i]].push_back({v[i],i});
    }
        
    vector<int> vis(n,0);
    vector<int> res,cyc;
    function<int(int,int)> dfs = [&](int cur,int prev)
    {
        if(vis[cur]==1)return cur;
        vis[cur] = 1;
        for(pii a: graph[cur])
        {
            if(a.ff==prev)continue;
            int val = dfs(a.ff,cur);
            if(val>=0)
            {
                cyc.push_back(val);
                res.push_back(a.ss);
                return cur;
            }
        }
        return -1;
    };
    dfs(0,0);
    cyc.push_back(0);
    if(cyc.size()==1)
        return false;
    reverse(res.begin(),res.end());
    reverse(cyc.begin(),cyc.end());
    int k = res.size();
    int r =0;
    while(cyc[r] != cyc.back())r++;
    vector<int> ans;
    for(int i = 0; i < r;i++)
        ans.push_back(res[i]);
    for(int i = r; i < k; i++)
        ans.push_back(res[i]);
    ans.push_back(res[r]^1);
    ans.push_back(res[r]);
    for(int i = k-1; i > r; i--)
        ans.push_back(res[i]);
    ans.push_back(res[r]^1);
    for(int i = r-1; i >= 0;i--)
        ans.push_back(res[i]);
    
    return dumy;
}
#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...