Pagini recente » Cod sursa (job #2069839) | Cod sursa (job #2362917) | Cod sursa (job #2073276) | Cod sursa (job #1217069) | Cod sursa (job #1111085)
# include <iostream>
# include <fstream>
# include <vector>
# include <queue>
# define nmax 100001
using namespace std;
ifstream f("ctc.in");
fstream g("ctc.out", ios::out);
int n,m,vis[nmax], post[nmax], nr, nrc;
vector <int> a[nmax];
vector <int> at[nmax];
void dfs(int u)
{
vis[u]=1;
int k,v;
for(k=0; k<a[u].size(); k++)
{
v=a[u][k];
if(vis[v]==0)
dfs(v);
}
post[++nr]=u;
}
void dfst(int u)
{
int k,v;
vis[u]=0;
g<<u<<" ";
for(k=0; k<at[u].size(); k++)
{
v=at[u][k];
if(vis[v])
dfst(v);
}
}
int main()
{
a[nmax].reserve(nmax);
int i,j,x,y;
f>>n>>m;
for(i=1; i<=m; i++)
{
f>>x>>y;
a[x].push_back(y);
at[y].push_back(x);
}
for(i=1; i<=n; i++)
if(vis[i]==0)
dfs(i);
g<<'\n';
for(i=n; i>=1; i--)
if(vis[post[i]])
{
dfst(post[i]);
g<<'\n';
nrc+=1;
}
g.close();
g.open("ctc.out", ios::in | ios::out);
g<<nrc;
return 0;
}