Pagini recente » Cod sursa (job #2557478) | Cod sursa (job #1419670) | Cod sursa (job #1655519) | Cod sursa (job #212423) | Cod sursa (job #974669)
Cod sursa(job #974669)
#include <cstdio>
#include <algorithm>
#include <list>
#include <queue>
#include <stack>
#define mp make_pair
#define pb push_back
#define x first
#define y second
FILE *f=fopen("dfs.in","r");
FILE *g=fopen("dfs.out","w");
using namespace std;
stack <int> s;
pair <int,int> vrtx[200001];
list<int>lv[100001];
int n,m,used[100001],pz;
void get_GRAPH()
{
fscanf(f,"%d%d",&n,&m);
int i,a,b;
for(i=1;i<=m;++i)fscanf(f,"%d%d",&a,&b),a < b ? vrtx[i]=mp(a,b) : vrtx[i]=mp(b,a);
sort(vrtx+1,vrtx+m+1);
for(i=1;i<=m;++i)
if(vrtx[i].x!=vrtx[i].y&&(vrtx[i-1].x!=vrtx[i].x||vrtx[i-1].y!=vrtx[i].y))
lv[vrtx[i].x].pb(vrtx[i].y),lv[vrtx[i].y].pb(vrtx[i].x);
}
int ready()
{
int i;
for(i=1;i<=n;++i)
if(used[i]==0){pz=i;return 0;}
return 1;
}
void DFS(int k)
{
s.push(k);
used[k]=1;
int crt;
while(!s.empty())
{
crt=s.top();s.pop();
for(list<int>::iterator it=lv[crt].begin();it!=lv[crt].end();++it)
if(!used[*it]){used[*it]=1;s.push(*it);}
}
}
int main()
{
get_GRAPH();
int nrg=0;
while(!ready())
DFS(pz),++nrg;
fprintf(g,"%d",nrg);
return 0;
}