刘书上例题  拓扑排序

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cmath>
  4. #include <map>
  5. #include <set>
  6. #include <queue>
  7. #include <stack>
  8. #include <vector>
  9. #include <sstream>
  10. #include <string>
  11. #include <cstring>
  12. #include <algorithm>
  13. #include <iostream>
  14. #define maxn 105
  15. #define INF 0x7fffffff
  16. #define inf 10000000
  17. #define MOD 1000000007
  18. #define ull unsigned long long
  19. #define ll long long
  20. using namespace std;
  21.  
  22. char s[110];
  23. bool g[20][20];
  24. int in[20], a[20], n;
  25.  
  26. void init()
  27. {
  28. memset(g, 0, sizeof(g));
  29. memset(in, 0, sizeof(in));
  30. memset(a, 0, sizeof(a));
  31. }
  32.  
  33. void topo()
  34. {
  35. queue<int> q;
  36. int cnt = 1;
  37. for(int i = 0; i <= n; ++ i) if(!in[i]) q.push(i);
  38. while(!q.empty())
  39. {
  40. int u = q.front();
  41. q.pop();
  42. for(int v = 0; v <= n; ++ v)
  43. {
  44. if(g[u][v])
  45. {
  46. in[v] --;
  47. if(!in[v])
  48. {
  49. q.push(v);
  50. a[v] = cnt;
  51. }
  52. }
  53. }
  54. ++ cnt;
  55. }
  56. }
  57.  
  58. int main()
  59. {
  60. int t;
  61. scanf("%d", &t);
  62. while(t --)
  63. {
  64. init();
  65. scanf("%d%s", &n, s);
  66. int id = 0;
  67. for(int i = 1; i <= n; ++ i)
  68. for(int j = i; j <= n; ++ j)
  69. {
  70. if(s[id] == '+')
  71. {
  72. g[i-1][j] = true;
  73. in[j] ++;
  74. }
  75. else if(s[id] == '-')
  76. {
  77. g[j][i-1] = true;
  78. in[i-1] ++;
  79. }
  80. ++ id;
  81. }
  82. topo();
  83. // for(int i = 0; i <= n; ++ i)
  84. // printf("%d ", a[i]);
  85. // puts("");
  86. for(int i = 1; i < n; ++ i)
  87. printf("%d ", a[i]-a[i-1]);
  88. printf("%d\n", a[n]-a[n-1]);
  89. }
  90. return 0;
  91. }

uva 1423 拓扑排序的更多相关文章

  1. UVa 10305 (拓扑排序) Ordering Tasks

    题意: 经典的拓扑排序.有n个任务,然后某些任务必须安排在某些任务前面完成,输出一种满足要求的序列. 分析: 拓扑排序用离散里面的话来说就是将偏序关系拓展为全序关系.我们将“小于”这种关系看做一条有向 ...

  2. 【紫书】Ordering Tasks UVA - 10305 拓扑排序:dfs到底再输出。

    题意:给你一些任务1~n,给你m个数对(u,v)代表做完u才能做v 让你给出一个做完这些任务的合理顺序. 题解:拓扑排序版题 dfs到底再压入栈. #define _CRT_SECURE_NO_WAR ...

  3. Uva 10305 拓扑排序

    题意: 给定n个点,与m条边, 给出他们的拓扑排序. 分析: 拓扑排序可以有两种做法, 第一种是dfs, 每次都找到某一个点的终点, 然后加入序列末尾, 正在访问的标记为-1, 访问过的标记为1, 未 ...

  4. UVa 1572 (拓扑排序) Self-Assembly

    题意: 有n种正放形,每种正方形的数量可视为无限多.已知边与边之间的结合规则,而且正方形可以任意旋转和反转,问这n中正方形是否可以拼成无限大的图案. 分析: 首先因为可以旋转和反转,所以可以保证在拼接 ...

  5. uva 10305 拓扑排序裸题

    https://vjudge.net/problem/UVA-10305 目前没学dfs做法,用的队列做法,每次找到一个入度为零的点出队后更新其他点,再加入入度为零的点直到查找完毕,这个题目显然一定有 ...

  6. UVA.10305 Ordering Tasks (拓扑排序)

    UVA.10305 Ordering Tasks 题意分析 详解请移步 算法学习 拓扑排序(TopSort) 拓扑排序的裸题 基本方法是,indegree表示入度表,vector存后继节点.在tops ...

  7. UVA 1572 Self-Assembly(拓扑排序)

    1 // 把一个图的所有结点排序,使得每一条有向边(u,v)对应的u都排在v的前面. 2 // 在图论中,这个问题称为拓扑排序.(toposort) 3 // 不难发现:如果图中存在有向环,则不存在拓 ...

  8. Uva 10305 - Ordering Tasks 拓扑排序基础水题 队列和dfs实现

    今天刚学的拓扑排序,大概搞懂后发现这题是赤裸裸的水题. 于是按自己想法敲了一遍,用queue做的,也就是Kahn算法,复杂度o(V+E),调完交上去,WA了... 于是检查了一遍又交了一发,还是WA. ...

  9. UVa 872 - Ordering 输出全拓扑排序

    本题要求输出所有拓扑排序的序列. 还好本题的数据量不是非常大.限制在26个大写英文字母,故此能够使用递归法输出. 这个递归输出所有解在Leetcode非常多这种题目的,不小心的话,还是非常难调试的. ...

随机推荐

  1. OC4_XML文件解析

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-// ...

  2. JS字符串截取

    substr 方法返回一个从指定位置开始的指定长度的子字符串. stringvar.substr(start [, length ]) 参数stringvar 必选项.要提取子字符串的字符串文字或 S ...

  3. 《HTML5与CSS3基础教程》学习笔记 ——Two Day

    第七章 1.  样式表:选择器和生命块 2.  !important: 某条声明的重要程度比其他高,在末尾添加 3.  属性值:inherit;  是强制继承 4.  1em=16px; 5.  可以 ...

  4. struts2中访问servlet API

    Struts2中的Action没有与任何Servlet API耦合,,但对于WEB应用的控制器而言,不访问Servlet API几乎是不可能的,例如需要跟踪HTTP Session状态等.Struts ...

  5. Connected_Component Labelling(联通区域标记算法) C++实现

    // Connected-Component Labelling.cpp : 定义控制台应用程序的入口点.//如有是使用,请务必注明引用出处网站:http://www.cnblogs.com/Amat ...

  6. 济南学习 Day 2 T3 pm

    它[问题描述]N个人坐成一圈,其中第K个人拿着一个球.每次每个人会以一定的概率向左边的人和右边的人传球.当所有人都拿到过球之后,最后一个拿到球的人即为胜者.求第N个人获胜的概率. (所有人按照编号逆时 ...

  7. SecureCRT相关设置

    Technorati 标签: SecureCRT,设置 1.  使用SecureCRT对Linux vim进行颜色设置 Linux的控制台颜色很好设置:Options ->Session Opt ...

  8. java集合学习一

    首先看一下java集合的关系图 1.1从全面了解Java的集合关系图.常见集合  list  set map等其中我们最常用的 list  map 结合.几天说一下常见的map.map在我工作的两年里 ...

  9. PCB常用度量衡单位

    1英尺=12英寸 1英寸inch=1000密尔mil 1mil=25.4um 1mil=1000uin (mil密耳有时也成英丝) 1um=40uin(有些公司称微英寸为麦,其实是微英寸) 1OZ=2 ...

  10. 方便实用的jQuery checkbox复选框全选功能

    // 主复选框 <input type="checkbox" id="ck" name="ckAll">// 子复选框项 < ...