제출 #954700

#제출 시각아이디문제언어결과실행 시간메모리
954700n1kThousands Islands (IOI22_islands)C++17
1.75 / 100
93 ms11864 KiB
#include "islands.h"

#include <bits/stdc++.h>

using namespace std;

vector<vector<array<int, 2>>> g;
vector<map<int, int>> connected;
vector<int> color, par, nett;

int x, y;

bool dfs(int u, int p){
	par[u] = p;
	color[u] = 1;

	if(nett[u]){
		return true;
	}

	for(auto [v, e]:g[u]){
		if(v==p)
			continue;
		if(color[v]){
			x = v;
			y = u;
			return true;
		}
		if(dfs(v, 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) {
	g.assign(N, {});
	connected.assign(N, {});
	color.assign(N, {});
	par.assign(N, {});
	nett.assign(N, {});

	for(int i=0; i<M; i++){
		if(not connected[U[i]][V[i]]){
			g[U[i]].push_back({V[i], i});
		}	
		connected[U[i]][V[i]]++;

		if(connected[U[i]][V[i]]>=2 and connected[V[i]][U[i]]>=1){
			nett[U[i]]=1;
		}
		if(connected[U[i]][V[i]]>=1 and connected[V[i]][U[i]]>=2){
			nett[V[i]]=1;
		}
	}

	return dfs(0, -1);
}
#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...