Cod sursa(job #2466151)

Utilizator eusebiu_alexandruMorar Eusebiu eusebiu_alexandru Data 1 octombrie 2019 17:09:58
Problema Parcurgere DFS - componente conexe Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include<fstream>

using namespace std;
ifstream f ("dfs.in");
ofstream g ("dfs.out");
bool fr[300000];
int i,j,n,start[300007],t[3][400000],st[300007],k,m,conexe,v,coloana,vecin;
int main()
{
  f>>n>>m;
  while(m!=0)
  {
     f>>i>>j;
  if(i!=j)
  {
         k++;
         t[0][k]=j;
         t[1][k]=start[i];
         start[i]=k;

         k++;
         t[0][k]=i;
         t[1][k]=start[j];
         start[j]=k;
     m--;
  }
  }
 for(i=1;i<=n;i++)
 {
    if(fr[i]==0)
    {
        k=1,st[k]=i;
        while(k!=0)
        {
            int ok=0;
            coloana=start[st[k]];
            while(coloana!=0)
            {
                vecin=t[0][coloana];
                if(fr[vecin]==0)
                    st[++k]=vecin,coloana=0,fr[vecin]=1,ok=1;
                else
                coloana=t[1][coloana];
            }
        if(ok==0)
            k--;
        }
      for(int j=i;j<=n;j++)
             if(fr[j]!=1)
                 conexe++,j=n+10;
      fr[i]=1;
    }
 }
 g<<conexe;
}