Submission #1320451

#TimeUsernameProblemLanguageResultExecution timeMemory
1320451BigBadBullyThousands Islands (IOI22_islands)C++20
24 / 100
22 ms6064 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<vector<pii>> graph(n);
    for(int i = 0; i < m; i++)
        graph[u[i]].push_back({v[i],i});
    vector<int> vis(n,0);
    vector<int> res,cyc;
    function<int(int)> dfs = [&](int cur)
    {
        if(vis[cur]==2)return -1;
        if(vis[cur]==1)return cur;
        vis[cur] = 1;
        for(pii a: graph[cur])
        {
            int val = dfs(a.ff);
            if(val>=0)
            {
                cyc.push_back(val);
                res.push_back(a.ss);
                return cur;
            }
        }
        vis[cur] = 2;
        return -1;
    };
    dfs(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 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...