Pagini recente » Cod sursa (job #1894455) | Cod sursa (job #2643331) | Cod sursa (job #1599654) | Cod sursa (job #217980) | Cod sursa (job #1113034)
#include <fstream>
using namespace std;
ifstream in("dfs.in");
ofstream out("dfs.out");
const int Nmax=100000;
const int Mmax=200000;
int n,m,ok,d,viz[Nmax];
struct lista
{ int v;
lista *urm;
};
lista *cap[100],*nou;
int vecin(int a,int b)
{ nou=cap[a];
while(nou)
{ if(nou->v==b)
return 1;
nou=nou->urm;
}
return 0;
}
void dfs(int ns)
{ int i;
viz[ns]=1;
for(i=1;i<=n;i++)
{ if(viz[i]==0)
if(vecin(ns,i)==1)
{
dfs(i);
}
}
}
int main()
{
int a,b,i;
in>>n>>m;
for(i=1;i<=m;i++)
{ in>>a>>b;
nou=new lista;
nou->v=b;
nou->urm=cap[a];
cap[a]=nou;
}
/*for(i=1;i<=n;i++)
{ nou=cap[i];
out<<i<<":";
while(nou)
{ out<<nou->v<<" ";
nou=nou->urm;
}
out<<endl;
}*/
viz[1]=1;
for(i=1;i<=n;i++)
{ if(viz[i]==0)
{dfs(i);
d++;
}
}
out<<d-1;
return 0;
}