hdu4857 (clasificación topológica, la figura construcción inversa)

escape

Tiempo límite: 2000/1000 MS (Java / Otros) Límite de memoria: 32768/32768 K (Java / Otros)
sumisión total (s): 8445 admitirá la presentación (s): 2423


 

Descripción del problema

Malo te suceda, y ahora todo el mundo está ocupado con sus vidas. Pero el canal de escape es muy estrecha, sólo podemos alineación.

Hay numeral n individuo de 1 a n. Mientras que algunas limitaciones extrañas, cada uno de la forma: b una condición necesaria antes.
Al mismo tiempo, la desigualdad social, los pobres, algunos ricos, algunas de estas personas. El más rico 1, No. 2 segundos rico, y así sucesivamente. El rico para sobornar a la persona a cargo, por lo que tienen algunos beneficios.

Los líderes pueden ahora organizar el orden alineamos pendiente de recibir los beneficios, así que dejó el N º 1 en el ranking tanto como sea posible, si en este momento hay una gran variedad de situaciones, se deja Nº 2 lo más adelante, si hay una gran variedad de situaciones, dejar que No.3 hacia delante, y así sucesivamente.

A continuación, han dispuesto que el orden. Garantizamos solvencia.

Entrada

Una primera línea de número entero T (1 <= T <= 5), indica el número de datos de prueba.
Entonces para cada uno de los datos de prueba, una primera línea de dos enteros n (1 <= n <= 30000) y m (1 <= m <= 100 000), respectivamente, y el número representa el número de restricciones.

Entonces m líneas de dos enteros A y B, representan el número b debe ser un número antes de una restricción. A y B deben ser diferentes.

Salida

, Separado para cada línea de salida de datos de prueba secuencialmente con cola espacio.

Ejemplo de entrada

1 5 10 3 5 1 4 2 5 1 2 3 4 1 4 2 3 1 5 3 5 1 2

Ejemplo de salida

1 2 3 4 5

Autor

CLJ

Fuente

BestCoder Ronda # 1

Recomendar

Hemos seleccionado cuidadosamente varios problemas similares para ti:   6460  6459  6458  6457  6456 

 Mind: si habrá la cola de prioridad problema normal de tipo topológico, tal como un borde 5-> 2 y un punto aislado 3, a menos de 5 debido a la clasificación topológica después de 3 se convierte en 2 delante de la 3,5,2,3. Si queremos construir una vista lateral inversa de una 2-> 5 y un punto 3 solitaria, mantenemos un gran get montón es superior 3,2,5 le dio la vuelta es la respuesta.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<int>e[30050];
int in[30050];
struct  cmp1{
	bool operator()(int &a,int &b)
	{
		return a>b;
	}
};
priority_queue<int> q;
int main()
{
	int n;
	int t,m;
	cin>>t;
	while(t--)
	{
        memset(in,0,sizeof(in));
        scanf("%d%d",&n,&m);
		for(int i = 1; i <= n; i++)
			e[i].clear();
		for(int i=0; i<m; i++)
		{
			int x,y;
            scanf("%d%d",&x,&y);
			in[x]++;
			e[y].push_back(x);
		}
		for(int i=1; i<=n; i++)
		{
			if(in[i]==0)
			{
				q.push(i);
			}
		}
		vector<int> ans;
		while(!q.empty())
		{
			int a=q.top();
			q.pop();
			ans.push_back(a);
			for(int i=0; i<e[a].size(); i++)
			{
				int b=e[a][i];
				in[b]--;
				if(in[b]==0)
					q.push(b);
			}
		}
        for(int i = ans.size()-1;i > -1;i--) {
            if(i != 0) printf("%d ",ans[i]);
            else printf("%d\n",ans[i]);
        }
	}
	return 0;
}

 

Publicados 155 artículos originales · ganado elogios 32 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/qq_37632935/article/details/87900434
Recomendado
Clasificación