【并查集】bzoj2054 疯狂的馒头】的更多相关文章

题意:懒得写了有空再补上 链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2054 离线从后往前做,并查集维护下一个没染色的就可以啦- #include<bits/stdc++.h> using namespace std; ; long long n, m, p, q; int fa[MAXN], color[MAXN]; template <typename tn> void read (tn & a) { tn x…
每个区间只被覆盖一次,求每个点被哪种区间覆盖或者某个区间是否已经被覆盖过都可以用并查集做. 做法:每个点都指向当前被覆盖区间的右端点+1的位置,某个点的下一个没被覆盖的点是gf(i),同理如果某个区间[l,r]的gf(l)>=r+1,则这个区间已经被完全覆盖. 显然每个点只会被最后一次染色确定颜色,倒着做就好了. #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio>…
因为只有最后被染上的颜色会造成影响,所以倒着处理,用并查集维护已经染色的区间的右端点,即fa[i]为i所在的已染色区间的右端点,这样可以保证O(n)的复杂度. #include<cstdio> #include<algorithm> using namespace std; #define N 1000001 inline void P(int x){ if(x<10)putchar(x+'0'); else{P(x/10);putchar(x%10+'0');} } int…
bzoj上现在找不到这题,所以目前只是过了样例,没有测 2054: 疯狂的馒头 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 715  Solved: 298 Description Input 第一行四个正整数N,M,p,q Output 一共输出N行,第i行表示第i个馒头的最终颜色(如果最终颜色是白色就输出0). Sample Input 4 3 2 4 Sample Output 2 2 3 0 HINT 用并查集维护当前馒头之后第一个白馒…
中文题面,一排有n个馒头,用刷子把整个连续的区间刷成一种颜色.因为颜色会覆盖掉之前的.所以我们可以用线段树来反着处理.如果这段区间之前刷到过就不要再遍历进去了,因为这次已经被上次刷的颜色给覆盖了.最后遍历线段树到叶子节点,输出最后的值就行了. #include<bits/stdc++.h> using namespace std; #define ll long long #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1…
2021.08.03 BZOJ 疯狂的馒头(并查集) 疯狂的馒头 - 题目 - 黑暗爆炸OJ (darkbzoj.tk) 重点: 1.并查集的神奇运用 2.离线化 题意: 给一个长为n的序列,进行m次操作,每次将一个区间修改为同一个数,之后要求输出每个位置的值. 分析: 用并查集把已经染过色的馒头跳过. 代码如下: (来自他人) #include <cstdio> #include <cstring> #include <iostream> #include <a…
链接 题解 先构建出最小生成树,如果删的是非树边,直接输出答案 否则问题转化为,把该边删掉后剩下两个联通块,两个端点分别在两个块内的最小边权,LCT可以维护 不妨换一种思考方向:考虑一条非树边可以代替哪些树边,根据次小生成树的套路,它可以代替树上两端点之间路径上的任意一条边 因此,对MST进行树链剖分,然后对每一条非树边更新它两端点之间路径的最小值即可 注意:题目给的图可能不连通,需要特判! #include<bits/stdc++.h> #define REP(i,a,b) for(int…
[BZOJ2054]疯狂的馒头(并查集,线段树) 题面 BZOJ 然而权限题,随便找个离线题库看看题吧. 题解 线段树就是个暴力,如果数据可以构造就能卡掉,然而不能构造,要不然复杂度瓶颈成为了读入了.既然这样,线段树随便跑跑就过了. 大概的做法就是,后面的颜色只要染上了显然就和前面的颜色无关了,所以用从后往前枚举颜色染就好了. #include<iostream> #include<cstdio> using namespace std; #define MAX 1000100 #…
/* 经典思路, 倒序并查集处理即可 */ #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<iostream> #define ll long long #define mmp make_pair #define M 1000010 using namespace std; int read() { int nm = 0, f = 1;…
4月的时候在luogu上做过 白雪皑皑 这道题,当时一遍AC可高兴了qwq,后来去了个厕所,路上忽然发现自己的做法是错的qwq...然后就咕咕了qwq 今天看到了 疯狂的馒头 ,发现一毛一样OvO...还是好好做一下吧QWQ 先上个错误代码(虽然BZOJ和Luogu都A了) // luogu-judger-enable-o2 #include<cstdio> #include<iostream> #define R register int #define getchar() *S…