제출 #637276

#제출 시각아이디문제언어결과실행 시간메모리
637276Fidan수천개의 섬 (IOI22_islands)C++17
10 / 100
32 ms3416 KiB
#include <bits/stdc++.h>
#include <variant>
#include "islands.h"
using namespace std;
typedef int ll;
variant<bool, vector<int>> find_journey(int n, int m, vector<int> u, vector<int> v){
	if(n==2){
		ll a=-1, b=-1, c=-1;
		for(ll i=0; i<m; i++){
			if(u[i]==0){
				if(a==-1) a=i;
				else b=i;
			}
			else c=i;
		}
		if(b==-1 || c==-1) return false;
		return vector<int>({a, c, b, a, c, b});
	}
	else if(m==n*(n-1)){
		ll a=-1, b=-1, c=-1, d=-1, e=-1, f=-1;
		for(ll i=0; i<m; i++){
			if(u[i]==0 && v[i]==1) a=i;
			if(u[i]==1 && v[i]==0) b=i;
			if(u[i]==1 && v[i]==2) c=i;
			if(u[i]==2 && v[i]==1) d=i;
			if(u[i]==2 && v[i]==0) e=i;
			if(u[i]==0 && v[i]==2) f=i;
		}
		return vector<int>({a, c, e, f, d, b, e, c, a, b, d, f});
	}
	else{
		vector<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()==2){
			ll a=g[0][0].second, b=g[0][1].second;
			ll a1, b1;
			if(a%2==0) a1=a+1;
			else a1=a-1;
			if(b%2==0) b1=b+1;
			else b1=b-1;
			return vector<int>({a, a1, b, b1, a1, a, b1, b});
		}
		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...