題目描述
???? 每到考試后,學校都會發成績表給每個學生,但是很多同學更關心的是自己在班級里的排名,可惜排名信息并沒有公開。
???? 小雯同學很想知道這次期末考試的全班排名情況,但是她的同學卻不愿意告訴她自己的分數,只告訴她自己和班里的某某同學比分數是高還是低。現在小雯想請你幫忙分析出可能的全班的排名情況,她會告訴你哪些同學比哪些同學分數高或低。
輸入輸出格式
輸入格式:
第一行兩個數 n,m,表示n個同學,m對同學分數比較關系。(2≤n≤100,1≤m≤1000 )
接下來的m行,每行三個數,i,j,k,如果k為0則 i 同學的分數比 j 同學高,如果k 為1 則 i 同學分數比 j 同學分數低
輸出格式:
輸出全班的考試排名情況,如果有多種可能,輸出字典序最小的一組。
輸入輸出樣例
輸入樣例#1:
5 5
1 4 0
2 4 0
1 3 1
4 5 1
5 2 0
輸出樣例#1:
3 1 5 2 4
又一道水題
按題意拓撲連邊再跑模板
#include<bits/stdc++.h>
using namespace std;
int n,m,ma[1001][1001],rudu[1001],dis[1001],ans=0,vis[1001];
priority_queue<int,vector<int>,greater<int> >q;
int topo()
{for(int i=1;i<=n;i++){if(rudu[i]==0){q.push(i);}}int temp;while(!q.empty()){temp=q.top();printf("%d ",temp);q.pop();for(int i=1;i<=n;i++){if(ma[temp][i]){rudu[i]--;if(rudu[i]==0) {q.push(i);}}}}
}
int main()
{cin>>n>>m;for(int i=1;i<=m;i++){int x,y,z;cin>>x>>y>>z;if(z==1){ma[y][x]=1;rudu[x]++;}else {ma[x][y]=1;rudu[y]++;}}topo();return 0;
}