Pagini recente » Cod sursa (job #2229007) | Cod sursa (job #2552838) | Cod sursa (job #298904) | Cod sursa (job #429307) | Cod sursa (job #277642)
Cod sursa(job #277642)
#include<stdio.h>
#include<string.h>
#define Nmax 100001
int n,v[Nmax],uz[Nmax],nr;
void DFS();
struct nod
{
int info,ex;
nod *urm;
};
typedef nod *Lista;
void Insert(Lista &prim,Lista p,int x)
{
Lista q=new nod;
q->info=x; q->ex=1;
if(prim){q->urm=p->urm; p->urm=q;}
else{q->urm=prim; prim=q;}
}
Lista L[Nmax],U[Nmax];
int main()
{int m,i,x,y;
freopen("dfs.in","rt",stdin);
freopen("dfs.out","wt",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=m;++i)
{ scanf("%d %d",&x,&y);
if(L[x]) Insert(L[x],U[x],y),U[x]=U[x]->urm;
else Insert(L[x],NULL,y),U[x]=L[x];
}
for(i=1;i<=n;++i) if(L[i]==NULL) Insert(L[i],NULL,0);
DFS();
printf("%d",nr-1);
return 0;
}
void DFS()
{
int i,x,st;
Lista p;
for(i=1;i<=n;++i)
if(L[i]->ex)
{v[1]=i; st=1;
while(st)
{
x=v[st--];
for(p=L[x];p;p=p->urm)
if(!uz[p->info]) p->ex=0,v[++st]=p->info, uz[p->info]=1;
}
nr++;
L[i]->ex=0;
memset(uz,0,sizeof(uz));
}
}