题意:

【CF1020E】Sergey

思路:这是一道论文题 https://link.springer.com/content/pdf/10.1007/BFb0066192.pdf


【CF1020E】Sergey

 



1 #include<cstdio>
2 #include<cstring>
3 #include<string>
4 #include<cmath>
5 #include<iostream>
6 #include<algorithm>
7 #include<map>
8 #include<set>
9 #include<queue>
10 #include<vector>
11 #include<bitset>
12 using namespace std;
13 typedef long long ll;
14 typedef unsigned int uint;
15 typedef unsigned long long ull;
16 typedef pair<int,int> PII;
17 typedef vector<int> VI;
18 #define fi first
19 #define se second
20 #define MP make_pair
21 #define N 1100000
22 #define M 51
23 #define MOD 1000000007
24 #define eps 1e-8
25 #define pi acos(-1)
26 #define oo 3e14
27
28 vector<int> c[N];
29 int a[N],b[N],q[N];
30
31 int main()
32 {
33 int n,m;
34 scanf("%d%d",&n,&m);
35 for(int i=1;i<=n;i++) c[i].clear();
36 for(int i=1;i<=m;i++)
37 {
38 int x,y;
39 scanf("%d%d",&x,&y);
40 c[x].push_back(y);
41 }
42 for(int i=1;i<=n;i++)
43 if(!a[i])
44 {
45 for(int j=0;j<=(int)c[i].size()-1;j++) a[c[i][j]]=1;
46 a[i]=b[i]=1;
47 }
48 for(int i=n;i>=1;i--)
49 if(b[i])
50 {
51 for(int j=0;j<=(int)c[i].size()-1;j++) b[c[i][j]]=0;
52 }
53 int ans=0;
54 for(int i=1;i<=n;i++)
55 if(b[i]) q[++ans]=i;
56 printf("%d\n",ans);
57 for(int i=1;i<=ans-1;i++) printf("%d ",q[i]);
58 printf("%d\n",q[ans]);
59 return 0;
60 }