確定比賽名次

2021-09-13 18:55:37 字數 1556 閱讀 1492

題解:拓撲排序

因為要最小序列所以引入優先佇列

然後關係可能存在重複

/*

*@author: stzg

*@language: c++

*/#include #include#include#include#include#include#include#include#include#include#include#include#include#include#include#include//#define debug

#define ri register int

#define endl "\n"

using namespace std;

typedef long long ll;

//typedef __int128 lll;

const int n=500+10;

const int m=100000+10;

const int mod=1e9+7;

const double pi = acos(-1.0);

const double exp = 1e-8;

const int inf = 0x3f3f3f3f;

int t,n,m,k,p,l,r,u,v;

int ans[n],cnt,flag,temp,sum;

int in[n];

int mp[n][n];

char str;

struct node{};

void dfs()}}

}}void init()

int main()

}dfs();

for(int i=1;i<=n;i++)

printf("%d%c",ans[i]," \n"[i==n]);

}#ifdef debug

printf("time cost : %lf s\n",(double)clock()/clocks_per_sec);

#endif

//cout << "hello world!" << endl;

return 0;

}

c++版本二

#include#include#includeusing namespace std;

int map[510][510];//前驅關係

int indegree[510];//前驅數量

int queue[510];//儲存拓撲序列

void topo(int n)

}queue[t++]=m;indegree[m]=-1;//將第一名的前驅數量設為-1 ,queue用來記錄順序。

for(i=1;i<=n;++i)

}printf("%d",queue[0]);//輸出拓撲序列

for(i=1;iprintf("\n");

}int main()

}topo(n);//呼叫拓撲排序

}return 0;

}

確定比賽名次

description 有n個比賽隊 1 n 500 編號依次為1,2,3,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在請你程式設計序確定排名。inp...

確定比賽名次

problem description 有n個比賽隊 1 n 500 編號依次為1,2,3,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在請你程式設計序...

確定比賽名次

description 有n個比賽隊 1 n 500 編號依次為1,2,3,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在請你程式設計序確定排名。inp...