Cod sursa(job #1698462)

Utilizator delta_wolfAndrei Stoica delta_wolf Data 4 mai 2016 15:43:54
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include<vector>
using namespace std;
vector <int> a[100001],Stack;
int nr,n,m,x,y,i,viz[100001];
void dfs(int x)
{
    int t=x;
    while(!Stack.empty())
    {
        viz[Stack.front()]=1;
        while(!a[Stack.front()].empty())
        {
            if(!viz[a[Stack.front()].front()])
                Stack.push_back(a[Stack.front()].back());
            a[Stack.front()].pop_back();
        }
        Stack.pop_back();
    }

}
int main()
{
    freopen("dfs.in","r",stdin);
    freopen("dfs.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        if(x>y)x^=y^=x^=y;
        a[x].push_back(y);
    }
    for(i=1;i<=n;i++)
    if(!viz[i])
    {
        nr++;
        while(!a[i].empty())
        {
            if(!viz[a[i].front()])
                Stack.push_back(a[i].back());
            a[i].pop_back();
        }
        viz[i]=1;
        dfs(i);
    }
    printf("%d",nr-1);
    return 0;
}