这场比赛没有做,刚做了一下第一道,感觉挺好的,第一次WA了,想不到哪错了,之后被一组数据惊倒
拜服!
1
3 1
3 1
答案是 : 3 1 2
不是 : 2 1 3
#include<cstdio>
#include<queue>
#include<vector>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
vector <int> v[30003];
int in[30003],a[100008],cn;
int main()
{
int n,m,s,t;
int icase;
priority_queue<int> q;
scanf("%d",&icase);
while(icase --)
{
cn = 0;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
v[i].clear();
while(!q.empty())q.pop();
memset(in,0,sizeof(in));
while(m -- )
{
scanf("%d%d",&s,&t);
v[t].push_back(s);
in[s]++;
}
for(int i=1;i<=n;i++)
{
if(!in[i])q.push(i);
}
while(!q.empty())
{
int x = q.top();q.pop();
a[cn++] = x;
for(int i=0;i<v[x].size();i++)
{
in[ v[x][i] ]--;
if( !in[ v[x][i] ])
{
q.push( v[x][i] );
}
}
}
for(int i=cn-1;i>0;i--)
printf("%d ",a[i]);
printf("%d\n",a[0]);
}
}