1146 Topological Order (拓扑排序)

 大致题意就是给出一个有向图,和K个拓扑排序序列,判断拓扑排序序列是否正确,不正确就输出序列的编号。。。

 

 拓扑排序序列,永远记住入度为0的顶点先入队列。

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 
 5 int main() {
 6     int n,m,u,v,k,num = 0;
 7     cin>>n>>m;
 8     vector<int> G[1010],indegree(n+1),temp(n+1),ans;
 9     for(int i = 0; i < m; ++i) {
10         cin>>u>>v;
11         G[u].push_back(v);
12         temp[v]++;
13     }
14     cin>>k;
15     for(int i = 0; i < k; ++i) {
16         int flag = 0;
17         indegree = temp;
18         for(int j = 0; j < n; ++j) {
19             scanf("%d",&u);
20             if(indegree[u] != 0) flag = 1;
21             for(auto v:G[u]) indegree[v]--;//把从u出发的所有边的终点v的入度减一
22         }
23         if(flag == 0) continue;
24         ans.push_back(i);
25     }
26     for(int i = 0; i < ans.size(); ++i) {
27         if(i > 0) printf(" ");
28         printf("%d",ans[i]);
29     }
30     return 0;
31 }

 

posted @ 2020-03-14 16:26  tangq123  阅读(145)  评论(0编辑  收藏  举报