Submission #1235734

#TimeUsernameProblemLanguageResultExecution timeMemory
1235734marizaThousands Islands (IOI22_islands)C++20
9.10 / 100
20 ms7236 KiB
#include "islands.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

variant<bool, vector<int>> find_journey(int n, int m, vector<int> u, vector<int> v) {
    vector<pair<ll,ll>> g[n];
    for(ll i=0; i<m; i++){
        g[u[i]].push_back({v[i],i});
    }

    if(g[0].size()==0) return false;
    else if(g[0].size()>=2){
        vector<int> ans;
        ll a1=g[0][0].second, b1=g[0][1].second, a2, b2;
        if(a1%2==0) a2=a1+1;
        else a2=a1-1;
        if(b1%2==0) b2=b1+1;
        else b2=b1-1;

        ans.push_back(a1);
        ans.push_back(a2);
        ans.push_back(b1);
        ans.push_back(b2);
        ans.push_back(a2);
        ans.push_back(a1);
        ans.push_back(b2);
        ans.push_back(b1);
        return ans;
    }
    else{
        ll curr=g[0][0].first, prev=0;
        vector<int> ans, ans2;
        ans.push_back(g[0][0].second);
        while(g[curr].size()<=2){
            if(g[curr].size()==1) return false;
            else{
                ll nxt;
                if(g[curr][0].first==prev){
                    nxt=g[curr][1].first;
                    ans.push_back(g[curr][1].second);
                    if(g[curr][1].second%2==0) ans2.push_back(g[curr][1].second+1);
                    else ans2.push_back(g[curr][1].second-1);
                }
                else{
                    nxt=g[curr][0].first;
                    ans.push_back(g[curr][0].second);
                    if(g[curr][0].second%2==0) ans2.push_back(g[curr][0].second+1);
                    else ans2.push_back(g[curr][0].second-1);
                }

                prev=curr;
                curr=nxt;
            }
        }
        
        ll a1, b1, a2, b2;
        if(g[curr][0].first==prev){
            a1=g[curr][1].second;
            b1=g[curr][2].second;
        }
        else if(g[curr][1].first==prev){
            a1=g[curr][0].second;
            b1=g[curr][2].second;
        }
        else{
            a1=g[curr][0].second;
            b1=g[curr][1].second;
        }

        if(a1%2==0) a2=a1+1;
        else a2=a1-1;
        if(b1%2==0) b2=b1+1;
        else b2=b1-1;

        ans.push_back(a1);
        ans.push_back(a2);
        ans.push_back(b1);
        ans.push_back(b2);
        ans.push_back(a2);
        ans.push_back(a1);
        ans.push_back(b2);
        ans.push_back(b1);

        reverse(ans2.begin(),ans2.end());
        for(auto i:ans2){
            ans.push_back(i);
        }
        if(g[0][0].second%2==0) ans.push_back(g[0][0].second+1);
        else ans.push_back(g[0][0].second-1);
        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...