比赛 EYOI与SBOI开学欢乐赛8th 评测结果 WWWWWWWWWWWWWWWWWWWW
题目名称 菜肴制作 最终得分 0
用户昵称 00000 运行时间 1.474 s
代码语言 C++ 内存使用 14.13 MiB
提交时间 2022-09-26 21:36:23
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int d,n,m;
vector<int> g[200000];
int mark[200000],r[200000];
int ans[200000],z;
int h=0;
//priority_queue<int> f;
struct node{
	int a,b;
}s[200000];
bool cmp(node x,node y)
{
	return x.a<y.a;
}
void dfs(int x,int k)
{
	if(r[x]) return;
	if(k>n)
	{
		h=1;
		return;
	} 
//	if(g[x].size()==0) f.push(x);
	for(int q:g[x])
	{
		dfs(q,k+1);
		if(h) return;
	}
	if(r[x]==0)
	{
		ans[++z]=x;
		r[x]=1;
	}
}
int main(){
	freopen("dishes.in","r",stdin);
	freopen("dishes.out","w",stdout);
cin>>d;
while(d--)
{
	h=0;z=0;memset(mark,0,sizeof(mark));memset(r,0,sizeof(r));
	cin>>n>>m;
	for(int q=1;q<=n;q++) g[q].clear();
	for(int q=1;q<=m;q++) cin>>s[q].a>>s[q].b;
	sort(s+1,s+m+1,cmp);
	for(int q=1;q<=m;q++) 
	{
		g[s[q].b].push_back(s[q].a);
		mark[s[q].a]++;
	}
	for(int q=1;q<=n;q++)
	{
		if(mark[q]==0) g[0].push_back(q);
	}
	dfs(0,0);
	if(h) 
	{
		cout<<"Impossible!"<<endl;
		continue;
	} 
	for(int q=1;q<=n;q++) cout<<ans[q]<<" ";
	cout<<endl;
}
return 0;
}