设这个序列的前缀和为Si(0 <= i <= n),S0 = 0

每一个符号对应两个前缀和的大小关系,然后根据这个关系拓扑排序一下。

还要注意一下前缀和相等的情况,所以用一个并查集来查询。

  1. #include <cstdio>
  2. #include <cstring>
  3.  
  4. const int maxn = ;
  5. int n;
  6. int G[maxn][maxn];
  7. char s[];
  8. int sum[maxn], a[maxn];
  9.  
  10. int topo[maxn], c[maxn], t;
  11.  
  12. void dfs(int u)
  13. {
  14. c[u] = ;
  15. for(int v = ; v <= n; v++) if(G[u][v] && !c[v]) dfs(v);
  16. topo[--t] = u;
  17. }
  18.  
  19. void toposort()
  20. {
  21. t = n + ;
  22. memset(c, , sizeof(c));
  23. for(int u = ; u <= n; u++) if(!c[u]) dfs(u);
  24. }
  25.  
  26. int p[maxn];
  27. int find(int x)
  28. { return x == p[x] ? x : p[x] = find(p[x]); }
  29.  
  30. void link(int x, int y)
  31. {
  32. int px = find(x), py = find(y);
  33. if(px != py) p[px] = py;
  34. }
  35.  
  36. int main()
  37. {
  38. //freopen("in.txt", "r", stdin);
  39.  
  40. int T; scanf("%d", &T);
  41. while(T--)
  42. {
  43. scanf("%d", &n);
  44. scanf("%s", s);
  45.  
  46. for(int i = ; i <= n; i++) p[i] = i;
  47.  
  48. memset(G, , sizeof(G));
  49. int p = ;
  50. for(int i = ; i <= n; i++)
  51. for(int j = i; j <= n; j++)
  52. {
  53. if(s[p] == '+') G[i-][j]++;
  54. if(s[p] == '-') G[j][i-]++;
  55. if(s[p] == '') link(i-, j);
  56. p++;
  57. }
  58. toposort();
  59. for(p = ; p <= n; p++) if(topo[p] == ) break;
  60. s[] = ;
  61.  
  62. for(int i = p + ; i <= n; i++)
  63. {
  64. int s1 = topo[i], s2 = topo[i-];
  65. if(find(s1) == find(s2)) sum[s1] = sum[s2]; //前缀和相等
  66. else sum[s1] = sum[s2] + ;
  67. }
  68. for(int i = p - ; i >= ; i--)
  69. {
  70. int s1 = topo[i], s2 = topo[i+];
  71. if(find(s1) == find(s2)) sum[s1] = sum[s2];
  72. else sum[s1] = sum[s2] - ;
  73. }
  74. for(int i = ; i <= n; i++)
  75. {
  76. if(i > ) printf(" ");
  77. printf("%d", sum[i] - sum[i - ]);
  78. }
  79. puts("");
  80. }
  81.  
  82. return ;
  83. }

代码君

LA 4255 (拓扑排序 并查集) Guess的更多相关文章

  1. ACM: hdu 1811 Rank of Tetris - 拓扑排序-并查集-离线

    hdu 1811 Rank of Tetris Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

  2. HDU 1811 拓扑排序 并查集

    有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...

  3. 拓扑排序 - 并查集 - Rank of Tetris

    Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球 ...

  4. Rank of Tetris(hdu1811拓扑排序+并查集)

    题意:关于Rating的信息.这些信息可能有三种情况,分别是"A > B","A = B","A < B",分别表示A的Rati ...

  5. Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)

    Problem   Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...

  6. LA4255/UVa1423 Guess 拓扑排序 并查集

    评分稍微有一点过分..不过这个题目确确实实很厉害,对思维训练也非常有帮助. 按照套路,我们把矩阵中的子段和化为前缀和相减的形式.题目就变成了给定一些前缀和之间的大小关系,让你构造一组可行的数据.这个东 ...

  7. hdu 1811 Rank of Tetris - 拓扑排序 - 并查集

    自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜, ...

  8. hdu 1811(缩点+拓扑排序+并查集)

    Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  9. hdu1811 Rank of Tetris 拓扑排序+并查集

    这道题是拓扑排序和并查集的综合运用. 由于排行榜是一种从高到低的排序.所以在拓扑排序的时候,如果有一次加入的入度为零的点数大于1,就有变得不确定了(UNCERTAIN). 由于只有一棵树,当树的数量大 ...

随机推荐

  1. DB2 的create or update方法

    通过merge方法实现的: MERGE INTO IFEBASE.STYLE AS MT USING (SELECT :scenario AS SCENARIO_ID, :style AS SHAPE ...

  2. IT架构之IT架构标准——思维导图

    参考: [日] 野村综合研究所系统咨询事业本部. 图解CIO工作指南. 周自恒译 人民邮电出版社,2014

  3. 在Delphi中实现动画窗口

    Windows下有一个函数AnimateWindow,在Delphi自带的Win32 API Help中是找不到的.你可以在Delphi的编辑器中输入windows.等待代码向导出来,继续输入Anim ...

  4. KMP模板,最小循环节

    (可以转载,但请注明出处!) 下面是有关学习KMP的参考网站 http://blog.csdn.net/yaochunnian/article/details/7059486 http://blog. ...

  5. iOS第三方(ActionSheet)-JTSActionSheet

    外观和系统的基本一样 github地址:https://github.com/jaredsinclair/JTSActionSheet 百度云下载: http://pan.baidu.com/s/1q ...

  6. POJ 2017

    #include<iostream> #include<stdio.h> using namespace std; int main() { //freopen("t ...

  7. 最常用的javascript方法函数

    字符串长度截取 function cutstr(str, len) { var temp, icount = 0, patrn = /[^\x00-\xff]/, strre = "&quo ...

  8. 传说中的WCF(2):服务协定的那些事儿

    上一篇文章中,我们抛出了N个问题:WCF到底难不难学?复杂吗?如果复杂,可以化繁为简吗? 其实,这些问题的答案全取决于你的心态,都说“态度决定一切”,这句话,不知道各位信不信,反正我是信了.首先,敢于 ...

  9. Newtonsoft.Json.dll

    代码 using System; DoNet2.0 需要借助于Newtonsoft.Json.dll using System.IO; using System.Text; using Newtons ...

  10. Android核心分析 之二方法论探讨之概念空间篇

    方法论探讨之概念空间篇 我们潜意识就不想用计算机的方式来思考问题,我们有自己的思维描述方式,越是接近我们思维描述方式,我们越容易接受和使用.各种计算机语言,建模工具,不外乎就是建立一个更接近人的思维方 ...