- ์ด ๊ธ์ c++๋ก ํ์ด๋ฅผ ์์ฑํ์์ต๋๋ค.
๋ฌธ์
์์
ํ์ด
- ๊ทธ๋ํ๋ฅผ ๊ตฌํํ ์ ์๋์ง ํ์ธํ๋ ๋ฌธ์ ๋ก ์ธ์ ํ๋ ฌ์ด๋ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ํตํด ํํํ ์ ์์ต๋๋ค.
- ์ด ๋ฌธ์ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ธ์ ํ๋ ฌ๋ณด๋ค ์ธ์ ๋ฆฌ์คํธ๋ก ํ ๊ฒฝ์ฐ ์๊ฐ๋ณต์ก๋๊ฐ ๋ฎ์ต๋๋ค. O(N2) < O(N+M)
- ๊ทธ๋ํ๋ฅผ ํํํ ํ BFS ํ์์ ํตํด ๊ตฌํํ ์ ์์ต๋๋ค.
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
vector<int> vec[1005];
int main(){
int n,m;
cin>>n>>m;
bool visit[1005];
fill(visit, visit+1005, false);
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
vec[a].push_back(b);
vec[b].push_back(a);
}
int cnt = 0;
for(int i=1;i<=n;i++){
if(!visit[i]){
visit[i] = true;
cnt++;
queue<int> q;
q.push(i);
while(!q.empty()){
int cur = q.front();
q.pop();
for(int j=0;j<vec[cur].size();j++){
int nxt = vec[cur][j];
if(!visit[nxt]){
q.push(nxt);
visit[nxt] = true;
}
}
}
}
}
cout<<cnt;
}
- ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด๋ ์์ ํ ๋ถ๋ถ ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์.