NewCodeTemplate
This commit is contained in:
42
模板/图/拓扑排序.cpp
Normal file
42
模板/图/拓扑排序.cpp
Normal file
@@ -0,0 +1,42 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <queue>
|
||||
using namespace std;
|
||||
|
||||
int main(){
|
||||
int n, e;
|
||||
cin >> n >> e;
|
||||
vector<vector<int>> adj(n);
|
||||
vector<int> degree(n, 0);
|
||||
for(int i = 0; i < e; i++){
|
||||
int a, b;
|
||||
cin >> a >> b;
|
||||
adj[a].push_back(b);
|
||||
degree[b]++;
|
||||
}
|
||||
|
||||
priority_queue<int, vector<int>, greater<int>> pq;
|
||||
for(int i = 0; i < n; i++){
|
||||
if(degree[i] == 0) pq.push(i);
|
||||
}
|
||||
|
||||
vector<int> result;
|
||||
while(!pq.empty()){
|
||||
auto m = pq.top(); pq.pop();
|
||||
for(auto x : adj[m]){
|
||||
degree[x]--;
|
||||
if(degree[x] == 0) pq.push(x);
|
||||
}
|
||||
result.push_back(m);
|
||||
}
|
||||
|
||||
if(result.size() != n){
|
||||
cout << "No" << endl;
|
||||
return 0;
|
||||
}
|
||||
for(auto x: result){
|
||||
cout << x << " ";
|
||||
}
|
||||
cout << endl;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user