Cod sursa(job #1930241)

Utilizator SolcanMihaiSolcan Mihai Andrei SolcanMihai Data 18 martie 2017 17:28:41
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

int n, m;
vector<int> vecini[50005];
int grade[50005];
int viz[50005];

void citire()
{
	scanf("%d %d", &n, &m);

	int tmp1, tmp2;

	for(int i = 0; i < m; i++)
	{
		scanf("%d %d", &tmp1, &tmp2);
		tmp1--;
		tmp2--;

		vecini[tmp1].push_back(tmp2);
		grade[tmp2]++;
	}
}

void solve()
{
	queue<int> Q;

	for(int i = 0; i < n; i++)
	{
		if(grade[i] == 0)
		{
			Q.push(i);
			viz[i] = true;
		}
	}

	while(Q.empty() == false)
	{
		int x = Q.front();
		Q.pop();
		printf("%d ", x + 1);

		int l = vecini[x].size();

		for(int i = 0; i < l; i++)
		{
			grade[vecini[x][i]]--;

			if(grade[vecini[x][i]] == 0 && viz[vecini[x][i]] == false)
			{
				viz[vecini[x][i]] = true;
				Q.push(vecini[x][i]);
			}
		}
	}
}

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

	citire();
	solve();

    return 0;
}