
----并查集
欣君
追寻那如樱花般的绚烂
展开
-
51nod 1204 Parity
如果[st,ed]区间和为偶数,那么前缀和sum[st-1]和sum[ed]的奇偶性相同,可以放入同一集合中。如果[st,ed]区间和为奇数,那么前缀和sum[st-1]和sum[ed]的奇偶性不同,可以将~sum[st-1]和sum[ed]放入同一集合中,sum[st-1]和~sum[ed]放入同一集合中。用并查集可以实现检验和合并操作。#includeusing namespac原创 2017-02-12 13:17:37 · 451 阅读 · 0 评论 -
51nod 1562 玻璃切割
之前连续好几天没怎么睡,还好没得道成仙。。。ddl是第一生产力。。。找了道水题做下。倒序处理所有答案,再输出。用可以用并查集进行合并区间操作(一开始想写伪链表的,发现好像不行)。不断更新横纵最大值即可。#includeusing namespace std;void read(int &a){ char ch;while(!((ch=getchar())>='0')原创 2017-05-03 22:22:14 · 664 阅读 · 0 评论 -
51nod 1557 两个集合
开2倍n的并查集。其中,i所在的并查集与i+n所在的并查集,分别表示与数字p[i]所在的集合,以及数字p[i]所不在的集合。也就是说,在正常情况下,i所在的并查集与i+n所在的并查集,不是同一个并查集。利用map,对于每一个p[i],查找a-p[i]以及b-p[i]的元素下标i1和i2根据查找情况,分别对i以及i+n进行并查操作。若找到i1和i2,且都不为i,则代表,a-p[i]与原创 2017-06-17 22:26:30 · 280 阅读 · 0 评论 -
51nod 1525 重组公司
维护一个数组pre[i],表示比i小且与i属于不同组的最大值。//#include#includeusing namespace std;void read(int&a){ char ch;while(!((ch=getchar())>='0')&&(ch<='9')); a=ch-'0';while(((ch=getchar())>='0')&&(ch<='9'))a原创 2017-07-14 14:32:18 · 295 阅读 · 0 评论