Pagini recente » Cod sursa (job #1530850) | Cod sursa (job #2016932) | Cod sursa (job #3224464) | Cod sursa (job #330554) | Cod sursa (job #2113809)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
struct graf{
int nod;
int dist;
graf* next;
};
graf* gt[100001];
graf* g[100001];
int comp[100001];
int c=1;
int counter=0;
int st[100001];
int k = 1;
int n;
void add(int a, int b, graf* v[])
{
graf* q = new graf;
q->nod = b;
q->next = v[a];
v[a] = q;
}
void DFS(int node, graf* v[]){
comp[node] = c;
graf *p;
p=v[node];
while(p!=NULL){
if(comp[p->nod] == 0)
DFS(p->nod, v);
p = p->next;
}
if(k<=n)
st[k] = node,
++k;
}
int main()
{
int i,x,y;
int m;
fin >> n >> m;
for(i=1;i<=m;++i){
fin >> x >> y;
add(y,x,gt);
add(x,y,g);
}
for(i=1;i<=n;++i){
if(comp[i]==0)
DFS(i,gt),
++c;
}
for(i=1;i<=n;++i){
comp[i] = 0;
}
for(i=1;i<=n;++i){
cout << st[i] << " ";
}
c = 1;
for(i=n;i>=1;--i){
if(comp[st[i]]==0)
DFS(st[i],g),
++c;
}
fout << c - 1 << endl;
for(i=1;i<=n;++i){
fout << st[i] << " ";
if(comp[st[i+1]]!=comp[st[i]])
fout << "\n";
}
return 0;
}