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 }