https://www.acmicpc.net/problem/9372
이전에 풀었던 네트워크 연결과 유사한 문제이다.
차이점은 가중치가 없기 때문에 정렬할 필요없이 입력한 순서대로 집합을 만들어나가면 된다.
parent값이 같다는 것은 이미 연결되어 있다는 것이기 때문에 패스하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <iostream> #include <vector> using namespace std; struct str{ int u,v,w; str(int u,int v):u(u),v(v){}; }; vector<int> parent; int find(int p){ if(parent[p]!=p){ p=find(parent[p]); } return p; } int main(){ int T; cin>>T; int N,M; int u,v; for(int testCase=0;testCase<T;testCase++){ scanf("%d %d",&N,&M); vector<str> vec; parent=vector<int> (N+1,0); int ans=0; for(int i=0;i<M;i++){ scanf("%d %d",&u,&v); vec.push_back(str(u,v)); } for(int i=1;i<=N;i++) parent[i]=i; for(int i=0;i<vec.size();i++){ int p1=find(vec[i].u); int p2=find(vec[i].v); if(p1!=p2){ parent[p1]=p2; ans++; } } cout<<ans<<endl; } return 0; } | cs |
'알고리즘(BOJ) > 그리디' 카테고리의 다른 글
백준 1946번 - 신입 사원 (0) | 2018.04.05 |
---|---|
백준 1120번 - 문자열 (0) | 2018.04.03 |
백준 1922번 - 네트워크 연결 (0) | 2018.03.16 |
백준 1049번 - 기타줄 (0) | 2018.02.03 |
백준 10610번 - 30 (0) | 2018.02.01 |