1 条题解
-
0
chrB LV 8 MOD @ 7 年前
标程,我知道标程很丑但是我不想改
- 1
信息
- 难度
- 6
- 分类
- (无)
- 标签
- (无)
- 递交数
- 32
- 已通过
- 9
- 通过率
- 28%
- 上传者
标程,我知道标程很丑但是我不想改
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
using namespace std;
int n,m,a[100010],b[100010],c[100010],x[100010],f[100010];
priority_queue<int> p;//个人极其讨厌队列叫p不叫q。
int main()
{
int i,j,k;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)//链式前向星
{
scanf("%d%d",&j,&k);
b[i]=k;
c[i]=a[j];
a[j]=i;
x[k]++;//x数组储存入度
}
for(i=1;i<=n;i++)
if(!x[i])
p.push(n-i);//-i就可以了标程就是要加个n
for(i=1;i<=n;i++)
{
if(p.empty())
break;
f[i]=n-p.top();
p.pop();
for(j=a[f[i]];j>0;j=c[j])
if(!--x[b[j]])
p.push(n-b[j]);
}
if(i<=n)
{
printf("-1\n");
return 0;
}
for(i=1;i<=n;i++)
printf("%d ",f[i]);
printf("\n");
return 0;
}