Pagini recente » Cod sursa (job #322629) | Cod sursa (job #1662654) | Cod sursa (job #557163) | Cod sursa (job #2464108) | Cod sursa (job #396677)
Cod sursa(job #396677)
using namespace std;
#include<iostream>
#include<cstdio>
struct nod{
int info;
nod *next;
};
nod *G[50005], *Gt[50005], *CTC[50005];
int n,ord[50005],timp,v[50005],vt[50005],NR[50005],nr,nrc;
void citire()
{
int i,m,a,b;
nod *p;
scanf("%d%d", &n, &m);
for(i=1;i<=n;i++)
G[i]=Gt[i]=CTC[i]=NULL;
for(i=1;i<=m;i++)
{
scanf("%d%d", &a, &b);
p=new nod;
p->info=b;
p->next=G[a];
G[a]=p;
p=new nod;
p->info=a;
p->next=Gt[b];
Gt[b]=p;
}
}
void dfs(int varf)
{
v[varf]=1;
for(nod *p=G[varf];p;p=p->next)
if(v[p->info]==0)
dfs(p->info);
ord[++timp]=varf;
}
void sort(int nrc)
{
int aux;
nod *p=CTC[nrc];
while(p->next->info>p->info);
{
aux=p->next->info;
p->next->info=p->info;
p->info=aux;
p=p->next;
}
}
void dfst(int varf,int nrc)
{
//printf("%d ",varf);
vt[varf]=nrc;
nod *p=new nod;
p->info=varf;
p->next=CTC[nrc];
CTC[nrc]=p;
//sort(nrc);
for(p=Gt[varf]; p ; p=p->next)
if(vt[p->info]==0)
dfst(p->info,nrc);
}
void kosaraju()
{
int i;
nod *p;
for(i=1;i<=n;i++)
if(v[i]==0)
dfs(i);
for(i=timp;i>0;i--)
if(vt[ord[i]]==0)
dfst(ord[i],++nrc), printf("\n");
}
void write()
{
nod *p;
freopen("retele.out","w",stdout);
printf("%d\n",nrc);
int i;
for(i=1;i<=nrc;i++)
{
printf("%d: ",i);
for(p=CTC[i]; p ; p = p->next)
printf("%d ", p -> info);
printf("\n");
}
}
void Afis(nod *G[]){
for(int i=1;i<=n;++i){
printf("%d : ",i);
for(nod *p=G[i]; p ; p=p->next)
printf("%d ",p->info);
printf("\n");
}
}
int main()
{
freopen("retele.in","r",stdin);
citire();
//Afis(G);
//Afis(Gt);
kosaraju();
write();
return 0;
}