Pagini recente » Cod sursa (job #1070972) | Cod sursa (job #2815186) | Cod sursa (job #977667) | Cod sursa (job #1608754) | Cod sursa (job #674480)
Cod sursa(job #674480)
#include<fstream>
#include<vector>
#include<bitset>
#include<algorithm>
#define maxn 100100
using namespace std;
vector <int> G[maxn],Gt[maxn],s[maxn],A;
int n,m,t[maxn],sol,nr;
bitset <maxn>viz;
void df(int x)
{int i;
viz[x]=1;
for(i=0;i<(int) G[x].size();++i)
if(!viz[G[x][i]])
df(G[x][i]);
t[x]=++nr;
}
void df2(int x)
{
int i;
s[sol].push_back(x);
viz[x]=1;
for(i=0;i<(int) Gt[x].size();++i)
if(!viz[Gt[x][i]])
df2(Gt[x][i]);
}
inline bool cmp(int a, int b)
{
return t[a]>t[b];
}
int main()
{
int i,j,a,b;
ifstream f("ctc.in");
ofstream g("ctc.out");
f>>n>>m;
for(i=1;i<=m;++i)
{
f>>a>>b;
G[a].push_back(b);
Gt[b].push_back(a);
}
for(i=1;i<=n;++i)
if(!viz[i])
df(i);
for(i=1;i<=n;++i)
A.push_back(i);
sort(A.begin(),A.end(),cmp);
viz.reset();
for(i=0;i<n;++i)
if(!viz[A[i]])
{
sol++;
df2(A[i]);
}
g<<sol<<"\n";
for(i=1;i<=sol;++i)
{ for(j=0;j<(int)s[i].size();++j)
g<<s[i][j]<<" ";
g<<"\n";
}
f.close();
g.close();
return 0;
}