Cod sursa(job #1239404)

Utilizator PatrikStepan Patrik Patrik Data 8 octombrie 2014 23:53:25
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>
#include<conio.h>
#include<vector>
#include<queue>
using namespace std;
#define MAX 50001
#define pb push_back

vector<int> G[MAX] ;
queue<int> Q;
int N , M , grad[MAX];

void main()
{
	int x , y , nod , vecin;

	freopen("sortaret.in" , "r" , stdin );
	freopen("sortaret.out" , "w" , stdout );

	scanf("%d%d" , &N , &M );
	for(int i = 1 ; i <= M ; ++i )
	{
		scanf("%d%d" , &x , &y );
		G[x].pb(y);
		G[y].pb(x);
		grad[x]++;
		grad[y]++;
	}

	for(int i = 1 ; i <= N ; ++i )
		if(grad[i]==1)Q.push(i);

	for(;!Q.empty();Q.pop())
	{
		nod = Q.front();
		printf("%d " , nod);
		vecin = G[nod][0];
		G[nod].erase(G[nod].begin());
		for(vector<int>::iterator it = G[nod].begin() ; it != G[nod].end() ; ++it )
			if(*it == nod)
			{
				G[vecin].erase(it);
				break;
			}
		grad[vecin]--;
		if(grad[vecin]==1)Q.push(vecin);
	}
}