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
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;
}