Cod sursa(job #2259414)

Utilizator PaduraruCristianPaduraru Cristian Daniel PaduraruCristian Data 13 octombrie 2018 12:06:42
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include <fstream>
#include <deque>

using namespace std;

ifstream f("dfs.in");
ofstream g("dfs.out");

deque <int> q;

int n,m;
int v[2][200001];
bool a[100001];
int main()
{
    int x,i,numar=0,start=2;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>v[1][i]>>v[2][i];
    }
    q.push_back(v[1][1]);
    q.push_back(v[2][1]);
    v[1][1]=v[2][1]=true;
    a[v[1][1]]=a[v[2][1]];
    while(!q.empty())
    {
        x=q.front();
        for(i=start;i<=m;i++)
        {
            if(v[1][i]==x)
            {
                if(a[v[2][i]]==false)
                    {q.push_back(v[2][i]);
                    a[v[2][i]]=true;}

                v[1][i]=v[2][i]=0;
            }
            else
                if(v[2][i]==x)
                {
                    if(a[v[1][i]]==false)
                    {
                        a[v[1][i]]=true;
                        q.push_back(v[1][i]);
                    }
                    v[1][i]=v[2][i]=0;
                }
        }
        q.pop_front();
        if(q.empty())
        {
            numar++;
            i=1;
            while(v[1][i]==0&&i<=m)
                i++;
            if(i<=m)
            {
                q.push_back(v[1][i]);
                q.push_back(v[2][i]);
                v[1][i]=v[2][i]=0;start=i+1;
            }
        }
    }
    g<<numar;
    return 0;
}