Pagini recente » Cod sursa (job #2647348) | Cod sursa (job #1911049) | Cod sursa (job #1174288) | Cod sursa (job #1757358) | Cod sursa (job #1808127)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
int n,m;
struct nod{
int val;
struct nod *urm;
}*L[100004],*l[100004],*actual;
int viz[100003];
int st[100003];
int vf;
int nr;
void dfs(int k)
{
struct nod *act;
act=L[k];
viz[k]=true;
while(act!=NULL)
{
if(viz[act->val]==false)
dfs(act->val);
act=act->urm;
}
vf++;
st[vf]=k;
}
void dfs1(int k,int valoare)
{
struct nod *act;
act=l[k];
viz[k]=valoare;
while(act!=NULL)
{
if(viz[act->val]==0)
dfs1(act->val,valoare);
act=act->urm;
}
}
int main()
{
f>>n>>m;
int i;
int x,y;
for(i=1;i<=m;i++)
{
f>>x>>y;
actual=new nod;
actual->val=y;
actual->urm=L[x];
L[x]=actual;
actual=new nod;
actual->val=x;
actual->urm=l[y];
l[y]=actual;
}
dfs(1);
nr=1;
for(i=1;i<=n;i++)
viz[i]=0;
while(vf>0)
{
if(viz[st[vf]]==0){
dfs1(st[vf],nr);
nr++;
}
vf--;
}
nr--;
g<<nr<<"\n";
int j;
for(i=1;i<=nr;i++)
{
for(j=1;j<=n;j++)
{
if(viz[j]==i)
g<<j<<" ";
}
g<<"\n";
}
return 0;
}