Cod sursa(job #862112)

Utilizator mazaandreiAndrei Mazareanu mazaandrei Data 22 ianuarie 2013 11:27:20
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
//g[i] lista vecinilor lui i
//d[i] gradul interior a lui i
//q coada in care introduc pe rand nodurile care au gradul interior 0
#include<fstream>
#include<vector>
#define NMAX 50005
using namespace std;
int n,m,d[NMAX],q[NMAX],x,y;
vector <int> g[NMAX];
ifstream in("sortaret.in"); ofstream out("sortaret.out");
int main(){
	in>>n>>m;
	for(int a,b,i=1; i<=m;++i){ in>>a>>b; g[a].push_back(b);}
	for(int i=1;i<=n;++i)
		if(d[i]==0) q[++q[0]]=i;
	for(int i=1;i<=n;++i){
		int x=q[i];
		vector <int> :: iterator it=g[x].begin(),sf=g[x].end();
		for(;it!=sf;++it){
			d[*it]--;
			if(d[*it]==0) q[++q[0]]=*it;
		}
	}
	for(int i=1;i<=n;++i) out<<q[i]<<' ';
	out<<'\n'; out.close(); return 0;
}