记录编号 436333 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [HNOI 2015]菜肴制作 最终得分 100
用户昵称 GravatarAnonymity 是否通过 通过
代码语言 C++ 运行时间 0.499 s
提交时间 2017-08-11 19:07:19 内存使用 2.60 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#include<set>
#define maxn 100005
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
inline int read()
{   char c=getchar();int x=0,y=1;
	while(c<'0'||c>'9'){if(c=='-') y=-1;c=getchar();}
	while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
	return x*y;
}
int t,n,m,num,hea[maxn],rin[maxn],ans[maxn],cnt,all;
struct road{int en,w,nex;}ro[maxn];
set<int>s;
void add(int x,int y){ro[num].en=y;ro[num].nex=hea[x];hea[x]=num++;}
int main()
{   freopen("dishes.in","r",stdin);
	freopen("dishes.out","w",stdout);
	t=read();
	while(t--)
	{	n=read();m=read();
		mem(hea,-1);mem(rin,0);
		num=0;cnt=0;all=0;int x,y;
		for(int i=1;i<=m;++i){x=read();y=read();add(y,x);++rin[x];}
		for(int i=n;i>=1;--i)
			if(!rin[i]) ++all,s.insert(i);
		int sz=s.size();
		while(sz)
		{	int u=*s.rbegin();s.erase(s.find(u));--sz;
			ans[++cnt]=u;
			for(int i=hea[u];i!=-1;i=ro[i].nex)
			{	int v=ro[i].en;--rin[v];
				if(!rin[v]) ++all,s.insert(v),++sz;
			}
		}
		if(all!=n) printf("Impossible!\n");
		else
		{	for(int i=cnt;i>=1;--i)
				printf("%d ",ans[i]);
			putchar('\n');
		}
	}
	return 0;
}