Submission #1135121

#TimeUsernameProblemLanguageResultExecution timeMemory
1135121Saul0906수천개의 섬 (IOI22_islands)C++20
10 / 100
23 ms12224 KiB
#include "islands.h"
#include <bits/stdc++.h>
#define rep(a,b,c) for(ll a=b; a<c; a++)
#define repr(a,b,c) for(ll a=b-1; a>c-1; a--)
#define repa(a,b) for(auto a:b)
#define ll long long
#define pll pair<ll, ll>
#define pii pair<int, int>
#define fi first
#define se second
#define pb push_back
#define mid ((l+r)>>1)
#define ppb pop_back()

using namespace std;
using vi = vector<int>;
template<typename T>
using vec = vector<T>;

const int N=2e5+5;
vec<pii> adj[N];
bool vis[N];

bool solve(int u, int p){
	vis[u]=true;
	if(adj[u].size()>=6) return true;
	repa(v,adj[u]) if(!vis[v.fi]) if(solve(v.fi,u)) return true;
	return false;
}

std::variant<bool, std::vector<int>> find_journey(
	int N, int M, std::vector<int> U, std::vector<int> V) {
	vi a, b, ans;
	if(N==2){
		rep(i,0,M){
			if(U[i]==0) a.pb(i);
			else b.pb(i);
		}
		if(a.size()<2 || b.size()<1) return false;
		ans={a[0],b[0],a[1],a[0],b[0],a[1]};
		return ans;
	}
	rep(i,0,N) adj[i].clear();
	rep(i,0,M) adj[U[i]].pb({V[i],i});
	rep(i,0,M) adj[V[i]].pb({U[i],i});
	if(N<=400){
		if(N<=2) return false;
		int c[4];
		rep(i,0,M){
			if(U[i]==0 && V[i]==1) c[0]=(i);
			if(U[i]==1 && V[i]==0) c[1]=(i);
			if(U[i]==0 && V[i]==2) c[2]=(i);
			if(U[i]==2 && V[i]==0) c[3]=(i);
		}
		ans={c[0],c[1],c[2],c[3],c[1],c[0],c[3],c[2]};
		return ans;
	}
	if(adj[0].size()>=4) return true;
	if(solve(0,-1)) return true;
	return false;
}
#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...