hduoj 1285 确定比赛名次
2015-05-04 20:55
162 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1285
Total Submission(s): 14739 Accepted Submission(s): 5892
[align=left]Problem Description[/align]
有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。
[align=left]Input[/align]
输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即P1队赢了P2队。
[align=left]Output[/align]
给出一个符合要求的排名。输出时队伍号之间有空格,最后一名后面没有空格。
其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。
[align=left]Sample Input[/align]
4 3
1 2
2 3
4 3
[align=left]Sample Output[/align]
[align=left] [/align]
1 2 4 3
分析;
拓扑排序算法。
AC代码:
确定比赛名次
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 14739 Accepted Submission(s): 5892
[align=left]Problem Description[/align]
有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。
[align=left]Input[/align]
输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即P1队赢了P2队。
[align=left]Output[/align]
给出一个符合要求的排名。输出时队伍号之间有空格,最后一名后面没有空格。
其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。
[align=left]Sample Input[/align]
4 3
1 2
2 3
4 3
[align=left]Sample Output[/align]
[align=left] [/align]
1 2 4 3
分析;
拓扑排序算法。
AC代码:
//典型的拓扑排序算法(邻接阵形式),可以作为拓扑排序的模板 #include <iostream> //#include <conio.h> using namespace std; #define arraysize 501 int map[arraysize][arraysize]; //存储图的临界阵 int n,m; int indegree[arraysize]; //存储点的入度 int main() { int i,j,k; int p1,p2; //freopen("1.txt","r",stdin); while(cin>>n>>m) { memset(map,0,sizeof(map)); memset(indegree,0,sizeof(indegree)); for(i=0;i<m;++i) { cin>>p1>>p2; if(!map[p1][p2]) //此处别忘了重边的判断,否则会wa { map[p1][p2] =1; indegree[p2]++; //重边的时候,如果不做处理,度数为计算错误 } } //拓扑排序 for(i=1;i<n+1;++i) //进行n次遍历,每次找出一个入度为0的节点 { for(j=1;j<n+1;++j) //遍历所有节点 { if(indegree[j]==0) //找出入度为0的节点 { indegree[j]--; //度数递减,避免下次继续找到 if(i!=n) { cout<<j<<" "; } else cout<<j<<endl; for(k=1;k<n+1;++k) { if(map[j][k]==1) // 删除与度数为0的节点相关联的边 { indegree[k]--; } } break; } } } } //getch(); return 0; }
相关文章推荐
- HDUOJ 1285 确定比赛名次(拓扑排序)
- HDU 1285----确定比赛名次
- hdu 1285 确定比赛名次
- hdoj 1285 确定比赛名次 【拓扑排序 注意重边】
- hdoj 1285 确定比赛名次(拓扑排序)
- hdoj 1285 确定比赛名次
- HDU 1285 确定比赛名次(拓扑排序)
- hdu 1285 确定比赛名次
- 拓扑排序杭电 1285确定比赛名次
- HDU 1285 确定比赛名次【拓扑排序】
- HDU 1285 确定比赛名次
- HDU 1285 确定比赛名次
- HDU 1285 确定比赛名次(简单拓扑排序)
- HDU 1285 确定比赛名次【拓扑排序入门题,链式前向星建图】
- hdu 1285 确定比赛名次(拓扑排序)
- hdu 1285 确定比赛名次(拓扑排序)
- hdu 1285 确定比赛名次
- HDU 1285 确定比赛名次(拓扑排序)
- hdu 1285 确定比赛名次(拓扑)
- 确定比赛名次(HDU 1285)