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);
}
}