Algorithm/SWExpertAcademy

[SWEA][8424번] 유일한 사이클

1일1코딩 2020. 4. 1. 21:57

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWyxsBd6lyADFAVP

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

소스코드

더보기
#include<stdio.h>
#include<vector>
#include<string.h>
using namespace std;
vector<vector<int>> map;
int dp[1001];
int N;
int answer = 0;
void solution(int prev, int cur, int depth)
{
	dp[cur] = depth;
	for (int i = 0; i < map[cur].size(); i++) {
		int next = map[cur][i];
		if (answer != 0) {
			return;
		}
		if (dp[next] != 0) {
			if (next != prev) {
				answer = dp[cur] - dp[next] + 1;
				return;
			}
		}
		else {
			solution(cur, next, depth + 1);
		}
		
	}
}

int main()
{
	int tc;
	scanf("%d", &tc);
	for (int t = 1; t <= tc; t++) {
		scanf("%d", &N);
		for (int i = 0; i < map.size(); i++) {
			map[i].clear();
		}
		memset(dp, 0, sizeof(dp));
		answer = 0;
		for (int i = 0; i <= N; i++) {
			vector<int> v;
			map.push_back(v);
		}
		for (int i = 0; i < N; i++) {
			int x, y;
			scanf("%d %d", &x, &y);
			map[x].push_back(y);
			map[y].push_back(x);
		}

		solution(0, 1, 1);
		printf("#%d %d\n", t, answer);
	}
}