HDU 1285 确定比赛名次——拓扑排序
来源:互联网 发布:erp源码 编辑:程序博客网 时间:2024/05/19 23:00
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1285
解题过程:
第1道拓扑排序题,值得纪念一下。
这个题目错了很多次。
开始用的是深搜,给每个节点一个权值,叶子节点的权值是1,父亲节点的权值是孩子节点的最大值+1。
在遍历完整个图之后,按照权值从大到小进行排序,就能得到一个拓扑排序。
但是这个排序很难满足题目的条件,就是ID小的放在前面,所以WA了。
后来用那种最传统的写法,确定每个顶点的度数,然后取出度数为0的点,接着删除与之相邻的边。
一直这样重复下去。
本来以为这样是对的,但是我的做法不是每次取一个度数为0的点,而是取了一堆度数为0的点。
这样就不能保证ID从小到大的排序了。
正解:
确定每个顶点的度数,从小到大去寻找度数为0的点k,找到之后就将它放入最后的输出结果中。
然后标记k的度数为-1,同时删除将与k相邻的点的度数-1。
重复上述步骤,就能得到最终解。
源代码:
#include<stdio.h>#include<stdlib.h>#include<string>#include<cmath>#include<vector>#include<map>#include<iostream>#include<algorithm>using namespace std;int s[505][505];int n,m;int degree[505]; //表示每个点的度数int key[505];void order(){ int i,j,k,t; //求出每个点的度数 memset(degree,0,sizeof(degree)); memset(key,0,sizeof(key)); for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(s[i][j]) degree[j]++; for(i=1;i<=n;i++) //求取第i个点 { k=1; while(degree[k]!=0) k++; key[i]=k; degree[k]=-1; for(j=1;j<=n;j++) if(s[k][j]) degree[j]--; } return;}int main(){ freopen("in.txt","r",stdin); int a,b,i; while(scanf("%d%d",&n,&m)==2) { memset(s,0,sizeof(s)); while(m--) { scanf("%d%d",&a,&b); s[a][b]=1; } order(); for(i=1;i<n;i++) printf("%d ",key[i]); printf("%d\n",key[n]); } return 0;}
- hdu 1285——确定比赛名次(拓扑排序)
- HDU 1285 确定比赛名次——拓扑排序
- 【拓扑排序】HDU 1285——确定比赛名次
- hdu 1285 确定比赛名次——拓扑排序
- HDU 1285 确定比赛名次 ——拓扑排序模板
- HDU—1285- 确定比赛名次(拓扑排序)
- HDU 1285 拓扑排序 确定比赛名次
- HDU 1285 拓扑排序-- 确定比赛名次
- hdu 1285 确定比赛名次(拓扑排序)
- HDU 1285 确定比赛名次 拓扑排序
- 【HDU】1285 确定比赛名次 拓扑排序
- HDU【1285】确定比赛名次---拓扑排序
- HDU-1285--确定比赛名次 (拓扑排序)
- 【拓扑排序】HDU 1285--- 确定比赛名次
- hdu 1285 确定比赛名次 拓扑排序
- hdu 1285 确定比赛名次 拓扑排序
- hdu 1285 确定比赛名次 拓扑排序
- HDU 1285 确定比赛名次 拓扑排序
- 串口同步传输与异步传输
- 关于百度知道的知识
- HDU 4333 Revolving Digits2012多校联赛第四场C题(扩展KMP+KMP)
- hdu 2034 人见人爱A-B
- Android google map api key的申请与使用(debug/release)
- HDU 1285 确定比赛名次——拓扑排序
- 以前自己写的一个分页的存储过程
- Jboss7.1.1安装
- Sequence Median
- JavaStringBuffer和string的区别
- xcode 中 c++ Standard Library的选择 和 如何混编c++
- error LNK2019: 无法解析的外部符号
- POJ1579-记忆化搜索
- Java程序员成长之路(你必须知道的优化、分析源代码的Java工具