Cod sursa(job #363775)

Utilizator andreitheo87Teodorescu Andrei-Marius andreitheo87 Data 14 noiembrie 2009 18:03:47
Problema Parcurgere DFS - componente conexe Scor 45
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<fstream>
#include<iostream>
#include<queue>
using  namespace std;
struct node{
    int vec;
    node* next;
};
node* vec[100000];
int n,m,st;
int main()
{
	freopen("dfs.in", "r", stdin);
    freopen("dfs.out", "w", stdout);
	scanf("%d %d %d",&n,&m,&st);
	st--;
	memset(vec,0,sizeof(vec));
	int viz[100000];
	memset(viz,0,sizeof(viz));
	for(int i=0; i<m; i++)
	{
		int x,y;
		scanf("%d %d",&x,&y);
		x--; y--;
		node* nod = new node;
		nod->vec = y;
		nod->next = vec[x];
		vec[x] = nod;

		nod = new node;
		nod->vec = x;
		nod->next = vec[y];
		vec[y] = nod;
	}
	int rez[100000],nr = 0;
	for(int i=0; i<n ;i++) rez[i] = -1;
	queue<int> q;
	for(int i=0; i<n; i++)
        if( rez[i] == -1 )
        {
            nr++;
            q.push(i);
            rez[i] = 0;
            while( q.size() )
            {
                int next = q.front();
                q.pop();
                node* p = vec[next];
                while( p ){
                        if( rez[p->vec] == -1 )
                        {
                            rez[p->vec] = 0;
                            q.push(p->vec);
                        }
                        p = p->next;
                }
            }
        }
    printf("%d",nr);
	return 0;
}