Submission #1081901

#TimeUsernameProblemLanguageResultExecution timeMemory
1081901TlenekWodoruThousands Islands (IOI22_islands)C++17
35 / 100
147 ms38472 KiB
#include<bits/stdc++.h>
#include "islands.h"
#include <variant>
using namespace std;
vector<int>D[200009];
vector<int>Num[200009];
vector<int>T[200009];
vector<int>Num2[200009];
int n,m;
bool usu[200009];
int stopien[200009];
bool zaj[200009];
vector<int>A,U;
void UsuVert(int v)
{
    usu[v]=1;
    for(int som : T[v])
    {
        stopien[som]--;
        if(usu[som]==0&&stopien[som]==0){U.push_back(som);}
    }
}
variant<bool, vector<int>> find_journey(
    int N, int M, vector<int> E1, vector<int> E2)
{
    n=N;
    m=M;
    for(int i=0;i<m;i++)
    {
        stopien[E1[i]]++;
        D[E1[i]].push_back(E2[i]);
        Num[E1[i]].push_back(i);
        T[E2[i]].push_back(E1[i]);
        Num2[E2[i]].push_back(i);
    }
    for(int i=0;i<n;i++)
    {
        if(stopien[i]==0)
        {
            U.push_back(i);
        }
    }
    int start=0;
    while(true)
    {
        if((int)U.size()>0)
        {
            const int u=U.back();
            U.pop_back();
            UsuVert(u);
        }
        else if(stopien[start]==1)
        {
            int som=-1,ind=-1;
            for(int i=0;i<(int)D[start].size();i++)
            {
                som=D[start][i];
                ind=Num[start][i];
                if(usu[som]==0){break;}
            }
            UsuVert(start);
            A.push_back(ind);
            start=som;
        }
        else{break;}
    }
    if(usu[start]){return false;}
    return true;
}
#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...