Submission #1211896

#TimeUsernameProblemLanguageResultExecution timeMemory
1211896Saul0906Thousands Islands (IOI22_islands)C++20
8.40 / 100
26 ms13384 KiB
#include "islands.h"
#include <bits/stdc++.h>
#define pii pair<int, int>
#define fi first
#define se second
#define all(a) a.begin(), a.end()
#define rep(a,b,c) for(int a=b; a<c; a++)
#define repa(a,b) for(auto a:b)
#define repr(a,b,c) for(int a=b-1; a>c-1; a--)
#define pb push_back

using namespace std;
using vi = vector<int>;

const int N=1e5+5;

bool vis[N];
vector<pii> adj[N], radj[N];

variant<bool, vi> find_journey(int n, int m, vi U, vi V) {
	int odg[n]{};
	rep(i,0,m){
		odg[U[i]]++;
		adj[U[i]].pb({V[i],i});
		radj[V[i]].pb({U[i],i});
	}
	vi bfcycle, cycle, afcycle, ans;
	int u=0, s=0;
	while(odg[s]==1){
		odg[s]=0;
		bfcycle.pb(adj[s][0].se);
		afcycle.pb(adj[s][0].se);
		s=adj[s][0].fi;
	}
	queue<int> q;
	rep(i,0,n) if(!odg[i]) q.push(i);
	while(q.size()){
		u=q.front();
		q.pop();
		vis[u]=true;
		repa(v,radj[u]){
			odg[v.fi]--;
			assert(odg[v.fi]>=0);
			if(!odg[v.fi]) q.push(v.fi);
		}
	}
	fill(vis,vis+n,0);
	rep(i,0,n) adj[i].clear(), radj[i].clear();
	if(odg[s]<2) return false;
	return true;
	reverse(all(afcycle));
	repa(e,bfcycle) ans.pb(e);
	repa(e,cycle) ans.pb(e);
	repa(e,afcycle) ans.pb(e);
	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...