http://acm.hdu.edu.cn/showproblem.php?pid=1285

题目大意: 给你每场比赛的成绩,让你根据成绩把排名弄出来

分析: 本来我是用普通方法写的,然后就一直wa,上网搜了一下是拓扑排序,我发现我从来没有写过拓扑排序

就问度娘吧没有办法了,然后度娘是这样跟我说的

对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序

这道题简直就是拓扑排序的重现啊,  然后度娘又跟我说了怎么用

由AOV网构造拓扑序列的拓扑排序算法主要是循环执行以下两步,直到不存在入度为0的顶点为止。
(1) 选择一个入度为0的顶点并输出之;
(2) 从网中删除此顶点及所有出边
循环结束后,若输出的顶点数小于网中的顶点数,则输出“有回路”信息,否则输出的顶点序列就是一种拓扑序列

啊感觉挺简单的,然后我就写了然后就对了, 啊啊啊我的心情你们不能理解

这是我自己写的代码,虽然有点戳,以后一定会慢慢变好的

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<math.h>
  5. #include<algorithm>
  6. #include<iostream>
  7. #include<vector>
  8. #include <queue>
  9.  
  10. using namespace std;
  11. #define N 2500
  12. #define ESP 1e-8
  13. #define INF 0x3f3f3f3f
  14. #define memset(a,b) memset(a,b,sizeof(a))
  15.  
  16. int in[N],out[N], vis[N];
  17. int ans[N];
  18. vector<vector <int> >G;
  19.  
  20. int main()
  21. {
  22. int n,m;
  23. while(scanf("%d %d", &n, &m)!=EOF)
  24. {
  25. G.clear();
  26. G.resize(n+);
  27. memset(out, );
  28. memset(in, );
  29. memset(vis, );
  30. for(int i=; i<m; i++)
  31. {
  32. int u,v;
  33. scanf("%d %d", &u, &v);
  34. G[u].push_back(v);
  35. out[u] ++;
  36. in[v] ++;
  37. }
  38.  
  39. int b=,dist=;
  40.  
  41. while()
  42. {
  43. dist=;
  44. for(int i=; i<=n; i++)
  45. {
  46. if(in[i] == && vis[i] == )
  47. {
  48. dist = i;
  49. vis[dist] = ;
  50. break;
  51. }
  52. }
  53.  
  54. if(dist == )
  55. break;
  56.  
  57. int q=dist;
  58. b++;
  59. printf("%d%c",q, b==n+?'\n':' ');
  60.  
  61. int len = G[q].size();
  62.  
  63. for(int i=; i<len; i++)
  64. {
  65. int v = G[q][i];
  66. in[v] --;
  67. }
  68. }
  69. }
  70. return ;
  71. }

确定比赛名次---HDU1285(拓扑排序)的更多相关文章

  1. hdu1285 确定比赛名次(拓扑排序)

    确定比赛名次 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  2. hdu1285 确定比赛名次【拓扑排序】

    题目链接 确定比赛名次                                         Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  3. hdu 确定比赛名次(拓扑排序)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    ...

  4. HDU 1285:确定比赛名次(拓扑排序)

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  5. hdoj-1285-确定比赛名次(拓扑排序)

    题目链接 /* Name:hdoj-1285-确定比赛名次 Copyright: Author: Date: 2018/4/11 15:59:18 Description: 标准的拓扑排序模板题,注意 ...

  6. [ACM] hdu 1285 确定比赛名次 (拓扑排序)

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  7. hdoj 1285 确定比赛名次【拓扑排序】

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  8. HDU 1285 确定比赛名次(拓扑排序)题解

    Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...

  9. HDU 1285 确定比赛名次(拓扑排序模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 题目大意:有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行 ...

随机推荐

  1. jmeter性能测试小小的实战

    项目描述: 被测网站:xqtesting.blog.51cto.com 指标:响应时间以及错误率 场景: 新建 一个线程组,设置线程属性: 线程数为10 Ramp-Up-Penod(in second ...

  2. 对病毒Virus.Win32.Ramnit.B的研究

  3. VC++ 解决在鼠标移动时,光标闪烁的问题。其实本质是 ON_SETCURSOR的用法

    在调用Windows API函数SetCursor设置光标时,可能会碰到闪烁的问题:移动鼠标,光标在Class Cursor(即注册窗口类时指定的Cursor)与预设Cursor之间闪烁. 在MSDN ...

  4. 用fxc.exe编译shader文件(*.fx, *.hlsl)的设置

    原文出自:http://msdn.microsoft.com/en-us/library/windows/desktop/bb509709(v=vs.85).aspx#Profiles 拿DX11 S ...

  5. [转载] Android Bander设计与实现 - 设计篇

    本文转载自: http://blog.csdn.net/chenxiancool/article/details/17454593 摘要 Binder是Android系统进程间通信(IPC)方式之一. ...

  6. php调用阿里大鱼 接口curl

    function http_request($url, $data = null, $header = null, $method = 'GET') { //如果是Get传参,拼接字符串 if ($m ...

  7. xcode的类库报错,如何解决

    首先看一下自己报错的原因,是当前UIkit框架还是别的,然后按住Command+shift+G 把"/Applications/Xcode.app/Contents/Developer/Pl ...

  8. keepalived衡环境搭建

    环境信息 keepalived master 192.168.1.106 keepalived backup 192.168.1.103 vip 192.168.1.100 1,安装keepalive ...

  9. Android部分调试开关

    开启 GPU Render 的profiling bar: adb shell setprop debug.hwui.profile visual_bars #或visual_lines adb sh ...

  10. GridLayout自定义数字键盘(两个EditText)

    功能说明: 适用于两个EditText输入框,并控制输入字符的长度,点击键盘中的"确定"按钮完成输入,点击"前一项"光标跳到前一个EditText 运行效果图如 ...