티스토리 뷰
728x90
문제 링크
풀이
어려워 보이지만 "어느 세 점도 일직선 위에 놓이지 않는다."라는 조건때문에 숨통이 트입니다. 이 조건만 보면 정말 반가워요..
유니온 파인드를 이용해서 풀 수 있습니다.
주어진 선분의 양 끝점이 같은 집합이면 그 선분이 사이클을 만들게 됩니다.
그러니 이런 경우에 몇 번째 차례인지 출력하고 종료하면 됩니다.
정답 코드
#include <bits/stdc++.h>
#define mem(v, e) memset((v), (e), sizeof((v)))
using namespace std;
int n, m;
int par[555'555];
int find(int x) {
if (par[x] == -1) return x;
return par[x] = find(par[x]);
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
mem(par, -1);
cin >> n >> m;
for (int i = 1; i < m + 1; i++) {
int u, v;
cin >> u >> v;
u = find(u);
v = find(v);
if (u != v) {
par[u] = v;
} else {
cout << i;
return 0;
}
}
cout << 0;
}
728x90
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 내적 (월간 코드 챌린지 시즌 1) (1) | 2021.04.15 |
---|---|
[BOJ] 백준 1086 - 박성원 (0) | 2021.04.08 |
[BOJ] 백준 13172 - Σ (2) | 2021.04.08 |
[BOJ] 백준 11444 - 피보나치 수 6 (0) | 2021.04.08 |
[BOJ] 백준 10830 - 행렬 제곱 (0) | 2021.04.08 |
댓글