hdu 1285 确定比赛名次(拓扑排序)
2015-11-30 16:18
465 查看
确定比赛名次
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 18377 Accepted Submission(s): 7355
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
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 18377 Accepted Submission(s): 7355
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 <limits.h> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <algorithm> #include <iostream> #include <iterator> #include <queue> #include <stack> #include <string> #include <vector> #include <set> //#define ONLINE_JUDGE #define eps 1e-8 #define INF 0x7fffffff //INT_MAX #define inf 0x3f3f3f3f //int?????????????????? #define FOR(i,a) for((i)=0;i<(a);(i)++) //[i,a); #define MEM(a) (memset((a),0,sizeof(a))) #define sfs(a) scanf("%s",a) #define sf(a) scanf("%d",&a) #define sfI(a) scanf("%I64d",&a) #define pf(a) printf("%d\n",a) #define pfI(a) printf("%I64d\n",a) #define pfs(a) printf("%s\n",a) #define sfd(a,b) scanf("%d%d",&a,&b) #define sft(a,b,c)scanf("%d%d%d",&a,&b,&c) #define for1(i,a,b) for(int i=(a);i<b;i++) #define for2(i,a,b) for(int i=(a);i<=b;i++) #define for3(i,a,b)for(int i=(b);i>=a;i--) #define MEM1(a) memset(a,0,sizeof(a)) #define MEM2(a) memset(a,-1,sizeof(a)) #define MEM3(a) memset(a,0x3f,sizeof(a)) #define LL __int64 const double PI = acos(-1.0); template<class T> T gcd(T a, T b) { return b ? gcd(b, a % b) : a; } template<class T> T lcm(T a, T b) { return a / gcd(a, b) * b; } template<class T> inline T Min(T a, T b) { return a < b ? a : b; } template<class T> inline T Max(T a, T b) { return a > b ? a : b; } using namespace std; template<class T> T Mint(T a, T b, T c) { if (a>b) { if (c>b) return b; return c; } if (c>a) return a; return c; } template<class T> T Maxt(T a, T b, T c) { if (a>b) { if (c>a) return c; return a; } else if (c > b) return c; return b; } const int maxn=505; int T,n,m,k; int a,b; int map[maxn][maxn]; int d[maxn],p[maxn]; void toposort(){ int k=0; while(k<n){ for(int i=1;i<=n;i++){ if(!d[i]){ d[i]--; p[k++]=i; for(int j=1;j<=n;j++){ if(map[i][j]) d[j]--; } break; } } } } int main() { #ifndef ONLINE_JUDGE freopen("test.in","r",stdin); freopen("test.out","w",stdout); #endif while(~sfd(n,m)){ MEM1(map); MEM1(d); while(m--){ sfd(a,b); if(!map[a][b]){ map[a][b]=1; d[b]++; } } toposort(); for(int i=0;i<n;i++){ printf("%d%c",p[i],i==n-1?'\n':' '); } } return 0; }
相关文章推荐
- android小知识点
- Javascript模块化编程
- CentOS6.5实现rsync+inotify实时同步
- 第13周项目1-Prim算法的验证
- js中使用eval()的问题
- HBase系列一
- Python列表list
- iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)
- 动态metric及主观测试实验
- Docker系列(五)OVS+Docker网络打通示例
- hdu1429胜利大逃亡(续)【广搜】
- Spring事务管理的三种方式
- 第十三周--项目4Floyd算法验证
- 分析mysql的QueryCache在相同语义SQL是否可以使用查询缓存
- 第十二周项目2-操作用邻接表存储的图
- 14周—验证算法-验证分块查找算法
- 查看脚本返回的状态值
- 第十周项目6 二叉树b中为x的层数
- (第十周项目1)二叉树算法库
- Android EditText getText() 为空