BOJ 2606번 바이러스 문제
union-find 문제인데, 다 구하고 나서 출력할때 좀 헤맸다.
정렬된 입력이 아니어서 정렬 후 union을 시작한다.
2606.cpp
#include <bits/stdc++.h>
using namespace std;
#define MAXX 101
int parent[MAXX], n, conn;
void _union(int, int);
int _find(int);
vector<pair<int, int> > edgeV;
int main() {
cin >> n >> conn;
for (int i = 1; i <= n; i++) {
parent[i] = i;
}
for (int i = 0; i < conn; i++) {
int first, second;
cin >> first >> second;
edgeV.push_back({first, second});
}
sort(edgeV.begin(), edgeV.end());
for (int i = 0; i < conn; i++) {
int first = edgeV[i].first;
int second = edgeV[i].second;
_union(first, second);
}
int test = 1;
int count = 0;
for (int i = 2; i <= n; i++) {
if (_find(1) == _find(i))
count++;
}
cout << count;
}
void _union(int f, int s) {
int firstParent = _find(f);
int secondParent = _find(s);
if (firstParent > secondParent)
parent[firstParent] = secondParent;
else
parent[secondParent] = firstParent;
}
int _find(int i) {
if (parent[i] == i) {
return i;
}
return parent[i] = _find(parent[i]);
}
'알고리즘 & SQL > 백준(BOJ)' 카테고리의 다른 글
백준 6359번 : 만취한 상범 C++ (0) | 2018.11.26 |
---|---|
백준 5597번 : 과제 안 내신 분..? C++ (0) | 2018.11.26 |
백준 2566번 : 최댓값 C++ (0) | 2018.11.26 |
백준 2523번 : 별 찍기 - 13 C++ (0) | 2018.11.26 |
백준 1927번 : 최소 힙 C++ (0) | 2018.11.26 |