拓扑排序精讲
117. 软件构建 (kamacoder.com)
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <unordered_map>
using namespace std;
int main(){
int n, m, s, t;
cin >> n >> m;
vector<int> inDegree(n); // 用于记录每个文件的入度
vector<int> result;
unordered_map<int, vector<int>> mp; // 用于记录每个文件的出度
for(int i = 1; i <= m; i++){
cin >> s >> t;
inDegree[t]++;
mp[s].push_back(t);
}
queue<int> zeroQ; // 用于记录零入度的节点
for(int i = 0; i < n; i++){
if(inDegree[i] == 0){
zeroQ.push(i);
result.push_back(i);
}
}
while(!zeroQ.empty()){
int cur = zeroQ.front();
zeroQ.pop();
if(!mp[cur].empty()){
for(int