确定比赛名次
模板题,按字典序输出拓扑排序,用到优先队列
我的代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 505;
int n, m;
int in[maxn], path[maxn];
vector <int> e[maxn];
void topsort(){
priority_queue<int , vector<int>, greater<int> > q;
int cnt = 0;
for(int i = 1; i <= n; i++){
if(in[i] == 0)
q.push(i);
}
while(!q.empty()){
int x = q.top();
q.pop();
path[++cnt] = x;
for(int i = 0; i < e[x].size(); i++){
int y = e[x][i];
in[y]--;
if(in[y] == 0)
q.push(y);
}
}
}
int main(){
int x, y;
while(cin >> n >> m){
memset(in, 0, sizeof(in));
for(int i = 1; i <= n; i++)
e[i].clear();
for(int i = 1; i <= m; i++){
cin >> x >> y;
e[x].push_back(y);
in[y]++;
}
topsort();
for(int i = 1; i <= n; i++)
cout << path[i] << ((i == n) ? '\n' : ' ');
}
}
wa点:注意答案输出格式。