10.10T1

此题我使用堆+拓扑排序直接一发就过了,发现正解是贪心。。。。

好吧

code:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #define N 200005
 5 using namespace std;
 6 struct node{
 7     int u,v;
 8 }e[N];
 9 int first[N],nxt[N],cnt;
10 void add(int u,int v){
11     e[++cnt].u=u;
12     e[cnt].v=v;
13     nxt[cnt]=first[u];
14     first[u]=cnt;
15 }
16 int ru[N],top[N],tot,n,m;
17 void topsort(){
18     priority_queue<int,vector<int>,greater<int> >q;
19     for(int i=1;i<=n;i++){
20         if(!ru[i])q.push(i);
21     }
22     while(!q.empty()){
23         int u=q.top();
24         top[++tot]=u;
25         q.pop();
26         for(int i=first[u];i;i=nxt[i]){
27             int v=e[i].v;
28             ru[v]--;
29             if(!ru[v]){
30                 q.push(v);
31             }
32         }
33     }
34 }
35 int a[N];
36 int main(){
37     freopen("patrol.in","r",stdin);
38     freopen("patrol.out","w",stdout);
39     cin>>n>>m;
40     for(int i=1;i<=m;i++)cin>>a[i];
41     for(int i=2;i<=m;i++){
42         ru[a[i]]++;
43         add(a[i-1],a[i]);
44     }
45     topsort();
46     for(int i=1;i<=tot;i++){
47         cout<<top[i]<<'
';
48     }
49     return 0;
50 }

over

原文地址:https://www.cnblogs.com/saionjisekai/p/9765829.html