题目:确定比赛名次
题意:
——n支队伍,给出m行对战信息。
每行a,b表示a队赢了b队。
输出一个符合要求的队伍排名。
注意:若符合条件的排名不唯一,编号小的队伍在前。
注意:数据可能存在重复。
数据范围:n<=500。
题解:
- 若n的范围如题目所示,暴力+拓扑排序。
注意事项:
去重用sort排序或者二维数组标记都行。
一次只排一个队伍的名次,不然会错的。 - 若n超过十万,sort排序+邻接表+优先队列+拓扑排序
解释:
sort排序:数据去重。
邻接表:存队伍信息。
优先队列:一次可多个队伍进队列,不会影响结果。
代码1:n比较小。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int du[550],e[550][550];
int n,m;
void tpsort()
{
int cnt=0,flag=0;
while(1)
{
for(int i=1;i<=n;i++)
{
if(du[i]==0)
{
if(fla