2012年8月22日
摘要: UVA_11988 实际上在插入模式下,敲一个字符的时候就相当于在前一个字符与前一个字符的后一个字符中间插入了一个字符,于是可以用链表模拟插入的过程,最后再沿链表将各个字符输出即可。#include<stdio.h>#include<string.h>#define MAXD 100010int L[MAXD], R[MAXD];char b[MAXD];void solve(){ int i, j, k; L[0] = R[0] = 0; for(i = 1; b[i]; i ++) { if(b[i] == '[') L[i] ... 阅读全文
posted @ 2012-08-22 16:48 Staginner 阅读(1103) 评论(0) 推荐(0) 编辑
摘要: UVA_11987 操作2实际上相当于先把x删掉然后再和y合并,因此和普通的并查集相比只是多了一个删除某个点的操作。 对于删除操作,是不能随便改变原来树中p[]的指向的,比较容易能够举出反例。其实我们只是想在不影响其他元素的前提下把x删掉,但不如换个思路,将x这个点对它所在的集合的“影响”变为0。然后再新开一个节点表示x,这样就相当于把x从原来的集合中剥离出来了。因此相比原来的并查集,需要多一个id[x]数组表示点x现在的标号,有了上面的思路其余的操作就不难写出来了。#include#include#define MAXD 200010int N, M, p[MAXD], id[MAXD].. 阅读全文
posted @ 2012-08-22 16:25 Staginner 阅读(819) 评论(1) 推荐(2) 编辑