題解:拓撲排序
因為要最小序列所以引入優先佇列
然後關係可能存在重複
/*
*@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...