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