Cod sursa(job #2259422)

Utilizator PaduraruCristianPaduraru Cristian Daniel PaduraruCristian Data 13 octombrie 2018 12:14:24
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 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[0][i]>>v[1][i];
    }
    q.push_back(v[0][1]);
    q.push_back(v[1][1]);
    v[0][1]=v[1][1]=0;
    a[v[0][1]]=a[v[1][1]]=true;
    while(!q.empty())
    {
        x=q.front();
        for(i=start;i<=m;i++)
        {
            if(v[0][i]==x)
            {
                if(a[v[1][i]]==false)
                    {q.push_back(v[1][i]);
                    a[v[1][i]]=true;}

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