Pagini recente » Cod sursa (job #2439322) | Cod sursa (job #275601) | Cod sursa (job #2730507) | Cod sursa (job #632873) | Cod sursa (job #872210)
Cod sursa(job #872210)
#include<fstream>
#include<vector>
#include<string.h>
using namespace std;
ifstream in("ctc.in");
ofstream out("ctc.out");
int nr,n,m,i,j,x,y,ok[100001];
vector<int> a[100001],sol[100001],Q;
void DF1(int nod)
{
ok[nod]=1;
for (vector<int>::iterator it=a[nod].begin();it!=a[nod].end();it++)
if (!ok[*it]) DF1(*it);
Q.push_back(nod);
}
void DF2(int nod)
{
ok[nod]=1;
sol[nr].push_back(nod);
for (vector<int>::iterator it=a[nod].begin();it!=a[nod].end();it++)
if (!ok[*it]) DF2(*it);
}
int main()
{
in>>n>>m;
for (i=1;i<=m;i++)
{
in>>x>>y;
a[x].push_back(y);
}
for (i=1;i<=n;i++)
if (!ok[i])
DF1(i);
memset(ok,0,sizeof(ok));
for(i=0;i<Q.size();i++)
if (!ok[Q[i]])
{
nr++;
DF2(Q[i]);
}
out<<nr<<'\n';
for (i=1;i<=nr;i++)
{
for (j=0;j<sol[i].size();j++)
out<<sol[i][j]<<' ';
out<<'\n';
}
}