分值 : 25 难度 : 水题 思路 : 用vector仿邻接表寸图,然后记录一个入度数组,按照他给的顺序,如果一个点入度不为0 就打印了说明不是拓扑顺序,否则继续将他能到达的点入度-1; 坑点 :
123456789101112131415161718192021222324252627282930313233343536373839
#include <iostream>#include <vector>using namespace std;vector <vector<int>> vec(1001);vector <int> rudu(1001, 0 ) ;vector <int> result;int main() { int N ,M , K ,c1 ,c2 ,temp; cin >> N >>M ; for(int i = 0 ; i< M ; i++) { cin >> c1 >> c2 ; vec[c1].push_back(c2); rudu[c2] ++ ; } cin >> K ; for(int i = 0 ; i < K ;i++) { vector<int> t ; t = rudu ; bool flag =true ; for(int j = 0 ; j< N ; j++) { cin >> temp ; if(t[temp] != 0 ) flag =false ; for(int ii = 0 ; ii < vec[temp].size() ;ii++) t[vec[temp][ii]] -- ; } if(!flag) result.push_back(i) ; } for(int i = 0 ; i< result.size() ;i++) { if(i) cout <<" " ; cout << result[i] ; }}