간선이 추가 될 때마다 부모를 추적하고 같은 부모를 가진다면 해당 간선번호를 출력한다.
더보기
#include <iostream>
#include <vector>
using namespace std;
int parent[500001];
int findp(int x) {
if (parent[x] == x) return x;
return parent[x] = findp(parent[x]);
}
struct node {
int s, e;
};
int main()
{
int n, m;
cin >> n >> m;
vector<node> arr(m + 1);
for (int i = 1; i <= n; i++) {
parent[i] = i;
}
for (int i = 1; i <= m; i++) {
cin >> arr[i].s >> arr[i].e;
}
for (int i = 1; i <= m; i++) {
int p1 = findp(arr[i].s);
int p2 = findp(arr[i].e);
if (p1 != p2) {
parent[p2] = p1;
}
else {
cout << i;
return 0;
}
}
cout << 0;
return 0;
}
'Algorithm > Algorithm 문제 풀이' 카테고리의 다른 글
[BAE/<JOON> 문제풀이] 1987. 알파벳 (0) | 2021.04.17 |
---|---|
[BAE/<JOON> 문제풀이] 1509. 팰린드롬 분할 (0) | 2021.04.17 |
[BAE/<JOON> 문제풀이] 1647. 도시 분할 계획 (0) | 2021.04.17 |
[BAE/<JOON> 문제풀이] 14003. 가장 긴 증가하는 부분 수열 5(풀이 미완) (0) | 2021.04.10 |
[BAE/<JOON> 문제풀이] 9328. 열쇠 (0) | 2021.04.10 |