HDOJ 1285 确定比赛名次
来源:互联网 发布:淘宝图片的尺寸是多少 编辑:程序博客网 时间:2024/06/05 07:07
确定比赛名次
TimeLimit: 2000/1000 MS (Java/Others) Memory Limit:65536/32768 K (Java/Others)
Total Submission(s): 25709 Accepted Submission(s): 10340
Problem Description
有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。
Input
输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即P1队赢了P2队。
Output
给出一个符合要求的排名。输出时队伍号之间有空格,最后一名后面没有空格。
其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。
Sample Input
4 3
1 2
2 3
4 3
Sample Output
1 2 4 3
最基础的拓扑排序题,但该题数据范围较小,也可以用暴力搞
法一:暴力
#include <bits/stdc++.h>using namespace std;#define mst(a,b) memset((a),(b),sizeof(a))#define f(i,a,b) for(int i=(a);i<=(b);++i)#define ll long longconst int maxn = 505;const int mod = 475;const ll INF = 0x3f3f3f3f;const double eps = 1e-6;#define rush() int T;scanf("%d",&T);while(T--)int mp[maxn][maxn],indegree[maxn];int n,m;void fun(){ f(i,1,n) f(j,1,n) { if(indegree[j]==0) { indegree[j]--; if(i!=n) printf("%d ",j); else printf("%d\n",j); f(k,1,n) { if(mp[j][k]) indegree[k]--; } break; } }}int main(){ int a,b; while(~scanf("%d%d",&n,&m)) { mst(mp,0); mst(indegree,0); f(i,1,m) { scanf("%d%d",&a,&b); if(!mp[a][b]) { mp[a][b]=1; indegree[b]++; } } fun(); } return 0;}
法二:拓扑排序
#include <bits/stdc++.h>using namespace std;#define mst(a,b) memset((a),(b),sizeof(a))#define f(i,a,b) for(int i=(a);i<=(b);++i)#define ll long longconst int maxn = 505;const int mod = 475;const ll INF = 0x3f3f3f3f;const double eps = 1e-6;#define rush() int T;scanf("%d",&T);while(T--)vector<int>s[maxn];int n,m,num,in[maxn],ans[maxn];struct cmp{ bool operator()(const int &a,const int &b) { return a>b; }};void tuopu(){ priority_queue<int,vector<int>,cmp >q; //或者直接 priority_queue<int,vector<int>,greater<int> >q; for(int i=1;i<=n;i++) if(in[i]==0) { q.push(i); in[i]=-1; } int x; while(!q.empty()) { x=q.top(); q.pop(); ans[++num]=x; for(int i=0;i<s[x].size();i++) { in[s[x][i]]--; if(in[s[x][i]]==0) q.push(s[x][i]); } } return;}int main(){ int a,b; while(~scanf("%d%d",&n,&m)) { int mp[maxn][maxn]={0}; for(int i=0;i<=n;i++) s[i].clear(); mst(in,0); while(m--) { scanf("%d%d",&a,&b); if(!mp[a][b]) { s[a].push_back(b); in[b]++; mp[a][b]=1; } } num=0; tuopu(); for(int i=1;i<num;i++) printf("%d ",ans[i]); printf("%d\n",ans[num]); } return 0;}
0 0
- HDOJ 1285 确定比赛名次
- HDOJ--1285--确定比赛名次
- HDOJ-1285-确定比赛名次
- hdoj 1285 确定比赛名次
- hdoj-1285-确定比赛名次
- HDOJ 1285 确定比赛名次
- HDOJ -- 1285 确定比赛名次
- HDOJ 1285 确定比赛名次
- HDOJ 1285 确定比赛名次
- Hdoj 1285 确定比赛名次
- 确定比赛名次--hdoj
- HDOJ 1285:确定比赛名次 拓扑排序
- hdoj 1285 确定比赛名次 【拓扑排序】
- 【拓扑排序】 HDOJ 1285 确定比赛名次
- HDOJ 1285 确定比赛名次 拓扑排序
- HDOJ 确定比赛名次 1285【拓扑排序】
- hdoj 1285 确定比赛名次(拓扑排序)
- hdoj 1285 确定比赛名次 【拓扑排序】
- 每日一题 No.46 输出素数的个数
- 护花天使项目,51单片机代码分析第一次
- UVA
- Android Zxing 的简单对接
- centos7 yum安装jjdk
- HDOJ 1285 确定比赛名次
- Redis windows php7
- mac下eclipse配置tomcat
- MAC使用技巧 (不定期补充)
- MacOS 系统显示隐藏文件
- Windows cannot find 'wuapp.exe' issue in Windows 10 Pro
- Alfred使用技巧(不定期补充)
- Mac命令行大全及使用技巧
- mac安装多个版本jdk,自由切换