![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
----并查集
欣君
追寻那如樱花般的绚烂
展开
-
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]放入同一集合中。 用并查集可以实现检验和合并操作。 #include using namespac原创 2017-02-12 13:17:37 · 423 阅读 · 0 评论 -
51nod 1562 玻璃切割
之前连续好几天没怎么睡,还好没得道成仙。。。ddl是第一生产力。。。 找了道水题做下。 倒序处理所有答案,再输出。 用可以用并查集进行合并区间操作(一开始想写伪链表的,发现好像不行)。不断更新横纵最大值即可。 #include using namespace std; void read(int &a) { char ch;while(!((ch=getchar())>='0')原创 2017-05-03 22:22:14 · 628 阅读 · 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 · 240 阅读 · 0 评论 -
51nod 1525 重组公司
维护一个数组pre[i],表示比i小且与i属于不同组的最大值。 //#include #include using 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 · 258 阅读 · 0 评论