Pagini recente » Cod sursa (job #1589062) | Cod sursa (job #1996117) | Cod sursa (job #698468) | Cod sursa (job #1255435) | Cod sursa (job #2216130)
#include <fstream>
#include <vector>
using namespace std;
vector <int> v[100002], u[100002];
const int pauza=1000000;
int a,b,t,r,n,m,nr,afis[200002],stiva[100002];
bool viz[100002];
void dfs(int start)
{
int i;
viz[start]=1;
for(i=0;i<v[start].size();i++)
if(!viz[v[start][i]])
dfs(v[start][i]);
stiva[++t]=start;
}
void dfs_back(int start)
{
int i;
viz[start]=0;
for(i=0;i<u[start].size();i++)
if(viz[u[start][i]])
dfs_back(u[start][i]);
afis[++r]=start;
}
int main()
{
ifstream f("ctc.in");
ofstream g("ctc.out");
int i;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>a>>b;
v[a].push_back(b);
u[b].push_back(a);
}
for(i=1;i<=n;i++)
if(!viz[i])
dfs(i);
for(i=t;i>=1;i--)
if(viz[stiva[i]])
{
nr++;
dfs_back(stiva[i]);
afis[++r]=pauza;
}
g<<nr<<'\n';
for(i=1;i<=r;i++)
if(afis[i]==pauza)
g<<'\n';
else
g<<afis[i]<<' ';
return 0;
}