Pagini recente » Cod sursa (job #535665) | Cod sursa (job #2639111) | Cod sursa (job #3223141) | Cod sursa (job #700637) | Cod sursa (job #1003688)
#include <cstdio>
#include <vector>
#include <queue>
//defines
#define NMax 100001
#define scan scanf //read
#define For(i,a,b) for(long i=a;i<=b;i++)
using namespace std;
//stl defines
#define V vector<long>
#define pb push_back
#define Q queue<long>
#define IFor(i,a) for(V::iterator i=a.begin(); i<a.end();i++)
//variables
V v[NMax];
long n,m,x,y,viz[NMax];
Q q;
//rapid defines
#define viz(i) viz[i]++
#define nviz(i) viz[i]--
//topologic sort
void topsort() {
long now;
while(!q.empty()) {
now=q.front(); //get front element
printf("%ld ",now);
IFor(i,v[now]) {
nviz(*i);
if(!viz[*i]) //test if the vertex became a primary vertex
q.push(*i); //add new element
}
q.pop(); //erase front(current) element
}
}
//main
int main()
{
freopen("sortaret.in","rt",stdin);
freopen("sortaret.out","wt",stdout);
scan("%ld %ld",&n,&m);
For(i,1,m)
scanf("%ld %ld",&x,&y), //scan edge
v[x].pb(y),
viz(y); //increase nr. of vertices adjacent with y(oriented graph)
For(i,1,n)
if(!viz[i])
q.push(i); //add to queue primary vertex(no adjacent vertices)
topsort();
return 0;
}