Pagini recente » Cod sursa (job #503161) | Cod sursa (job #517837) | Cod sursa (job #1601091) | Cod sursa (job #2042919) | Cod sursa (job #1527667)
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>
#include <vector>
#include <algorithm>
using namespace std;
const int nmax = 7502;
int n,a,b,var[nmax],vis[nmax],paths[nmax];
char inVar[nmax];
vector <int> v[nmax];
int bfs(){
queue<int> Q;
memset(vis,-1,4*(n+1));
int done = 1, ck = 0;
while (done <= n) {
Q.push(done);
vis[done] = ++ck;
while (!Q.empty()) {
int nod = Q.front();
Q.pop();
for (unsigned int i = 0; i < v[nod].size(); i++)
if (vis[v[nod][i]] == -1) {
vis[v[nod][i]] = ck ;
Q.push(v[nod][i]);
}
}
for(;done <= n && vis[done]!=-1;done++);
}
return ck-1;
}
int main()
{
int m;
freopen("dfs.in","r",stdin);
freopen("dfs.out","w",stdout);
scanf("%d %d %d %d",&n, &m, &a, &b);
int x,y;
for(int i = 0; i < m; i++) {
scanf("%d %d",&x, &y);
v[x].push_back(y);
v[y].push_back(x);
}
y = bfs();
printf("%d",y);
fclose(stdin);
fclose(stdout);
return 0;
}