LA 4255 (拓扑排序 并查集) Guess
设这个序列的前缀和为Si(0 <= i <= n),S0 = 0
每一个符号对应两个前缀和的大小关系,然后根据这个关系拓扑排序一下。
还要注意一下前缀和相等的情况,所以用一个并查集来查询。
- #include <cstdio>
- #include <cstring>
- const int maxn = ;
- int n;
- int G[maxn][maxn];
- char s[];
- int sum[maxn], a[maxn];
- int topo[maxn], c[maxn], t;
- void dfs(int u)
- {
- c[u] = ;
- for(int v = ; v <= n; v++) if(G[u][v] && !c[v]) dfs(v);
- topo[--t] = u;
- }
- void toposort()
- {
- t = n + ;
- memset(c, , sizeof(c));
- for(int u = ; u <= n; u++) if(!c[u]) dfs(u);
- }
- int p[maxn];
- int find(int x)
- { return x == p[x] ? x : p[x] = find(p[x]); }
- void link(int x, int y)
- {
- int px = find(x), py = find(y);
- if(px != py) p[px] = py;
- }
- int main()
- {
- //freopen("in.txt", "r", stdin);
- int T; scanf("%d", &T);
- while(T--)
- {
- scanf("%d", &n);
- scanf("%s", s);
- for(int i = ; i <= n; i++) p[i] = i;
- memset(G, , sizeof(G));
- int p = ;
- for(int i = ; i <= n; i++)
- for(int j = i; j <= n; j++)
- {
- if(s[p] == '+') G[i-][j]++;
- if(s[p] == '-') G[j][i-]++;
- if(s[p] == '') link(i-, j);
- p++;
- }
- toposort();
- for(p = ; p <= n; p++) if(topo[p] == ) break;
- s[] = ;
- for(int i = p + ; i <= n; i++)
- {
- int s1 = topo[i], s2 = topo[i-];
- if(find(s1) == find(s2)) sum[s1] = sum[s2]; //前缀和相等
- else sum[s1] = sum[s2] + ;
- }
- for(int i = p - ; i >= ; i--)
- {
- int s1 = topo[i], s2 = topo[i+];
- if(find(s1) == find(s2)) sum[s1] = sum[s2];
- else sum[s1] = sum[s2] - ;
- }
- for(int i = ; i <= n; i++)
- {
- if(i > ) printf(" ");
- printf("%d", sum[i] - sum[i - ]);
- }
- puts("");
- }
- return ;
- }
代码君
LA 4255 (拓扑排序 并查集) Guess的更多相关文章
- ACM: hdu 1811 Rank of Tetris - 拓扑排序-并查集-离线
hdu 1811 Rank of Tetris Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & % ...
- HDU 1811 拓扑排序 并查集
有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...
- 拓扑排序 - 并查集 - Rank of Tetris
Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球 ...
- Rank of Tetris(hdu1811拓扑排序+并查集)
题意:关于Rating的信息.这些信息可能有三种情况,分别是"A > B","A = B","A < B",分别表示A的Rati ...
- Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)
Problem Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...
- LA4255/UVa1423 Guess 拓扑排序 并查集
评分稍微有一点过分..不过这个题目确确实实很厉害,对思维训练也非常有帮助. 按照套路,我们把矩阵中的子段和化为前缀和相减的形式.题目就变成了给定一些前缀和之间的大小关系,让你构造一组可行的数据.这个东 ...
- hdu 1811 Rank of Tetris - 拓扑排序 - 并查集
自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜, ...
- hdu 1811(缩点+拓扑排序+并查集)
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu1811 Rank of Tetris 拓扑排序+并查集
这道题是拓扑排序和并查集的综合运用. 由于排行榜是一种从高到低的排序.所以在拓扑排序的时候,如果有一次加入的入度为零的点数大于1,就有变得不确定了(UNCERTAIN). 由于只有一棵树,当树的数量大 ...
随机推荐
- DB2 的create or update方法
通过merge方法实现的: MERGE INTO IFEBASE.STYLE AS MT USING (SELECT :scenario AS SCENARIO_ID, :style AS SHAPE ...
- IT架构之IT架构标准——思维导图
参考: [日] 野村综合研究所系统咨询事业本部. 图解CIO工作指南. 周自恒译 人民邮电出版社,2014
- 在Delphi中实现动画窗口
Windows下有一个函数AnimateWindow,在Delphi自带的Win32 API Help中是找不到的.你可以在Delphi的编辑器中输入windows.等待代码向导出来,继续输入Anim ...
- KMP模板,最小循环节
(可以转载,但请注明出处!) 下面是有关学习KMP的参考网站 http://blog.csdn.net/yaochunnian/article/details/7059486 http://blog. ...
- iOS第三方(ActionSheet)-JTSActionSheet
外观和系统的基本一样 github地址:https://github.com/jaredsinclair/JTSActionSheet 百度云下载: http://pan.baidu.com/s/1q ...
- POJ 2017
#include<iostream> #include<stdio.h> using namespace std; int main() { //freopen("t ...
- 最常用的javascript方法函数
字符串长度截取 function cutstr(str, len) { var temp, icount = 0, patrn = /[^\x00-\xff]/, strre = "&quo ...
- 传说中的WCF(2):服务协定的那些事儿
上一篇文章中,我们抛出了N个问题:WCF到底难不难学?复杂吗?如果复杂,可以化繁为简吗? 其实,这些问题的答案全取决于你的心态,都说“态度决定一切”,这句话,不知道各位信不信,反正我是信了.首先,敢于 ...
- Newtonsoft.Json.dll
代码 using System; DoNet2.0 需要借助于Newtonsoft.Json.dll using System.IO; using System.Text; using Newtons ...
- Android核心分析 之二方法论探讨之概念空间篇
方法论探讨之概念空间篇 我们潜意识就不想用计算机的方式来思考问题,我们有自己的思维描述方式,越是接近我们思维描述方式,我们越容易接受和使用.各种计算机语言,建模工具,不外乎就是建立一个更接近人的思维方 ...