[JZOJ4769]【GDOI2017模拟9.9】graph】的更多相关文章

题目 描述 题目大意很明确了,所以不说-- 思考历程 一看见这题,咦,这就是传说中的动态图吗? 普通的动态图是维护连通性,这题是维护它是否是二分图,换言之就是维护它是否有奇环. 好像很复杂的样子. 想用LCT搞一搞,但是搞了很久终究搞不出来. 如果这道题全部都是加入就好了,但对于删除,好像要影响很多东西-- 想了很久终将放弃. 正解 现在主要的正解大体分为两种: 第一种方法是使用线段树. 对于每一条边,预处理除它们的加入和删除时间. 可以把它们存在的时间看作时间轴上的一段区间. 然后就有个很强大…
似乎我搞得太复杂了? 先tarjan缩点然后dfs就行了QAQ. (我不说我被一个sb错调了半个小时....不要以为缩点后dfs就可以肆无忌惮的不加特判判vis了.. bfs的做法:减反图,然后从大到小枚举(贪心),标记即可 #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algorit…
题面 题解 首先,点变黑的过程是不可逆的,黑化了就再也洗不白了 其次,对于\(v\)的祖先\(rt\),\(rt\)能用来更新答案当且仅当\(sz_{rt}>sz_{x}\),其中\(sz\)表示子树中黑点的个数,\(x\)表示\(rt\)走到\(v\)的路径上的第二个节点 每一次染黑一个新的点\(u\)之后,我们要让它所有祖先的\(sz+1\),那么我们可以考虑树链剖分+线段树 再回过头来康康树链剖分的过程啊--我们跳着跳着跳到了\(u\),那么对于\([top[u],u]\)之间的点的\(s…
题面 题解 调了好几个小时啊--话说我考试的时候脑子里到底在想啥-- 首先,这个数列肯定是有循环节的,而且循环节的长度\(T\)不会超过\(D\) 那么就可以把数列分成三份,\(L+S+R\),其中\(L,R\)为左右两边剩下的,\(S\)为中间的循环数列.对于\(L\),算出\(pre_i\)表示最后一个数小于等于\(i\)的最长的子序列的长度,对于\(R\)算出\(suf_i\)表示最开始的一个数大于等于\(i\)的最长的子序列的长度.然后用中间出现过的每一个数以及\(pre\)和\(suf…
题面 题解 考场上蠢了--这么简单的东西都想不到-- 首先排序加去重. 先来考虑一下,形如 \[a_1x_1+a_2x_2+...a_nx_n=w,a_1<a_2<...<a_n,x_i\geq 0\] 的方程该怎么判断是否有解 首先,把两边都放到模\(a_1\)的意义下,就是 \[a_2x_2+...a_nx_n\equiv w\pmod{a_1}\] 然后是一个神仙的转化,我们设有\(a_1\)个点,分别代表\(0,1,...,a_1-1\),对于每一个点\(u\),都连出去\(n-…
题目 分析 首先,将这些节点按dfs序建一棵线段树. 因为按dfs序,所以在同一子树上的节点会放在线段树相邻的位置. 发现,对于一个位置x,它的权值只会对以x为根的子树造成影响. 当修改x时,用w[x]更新子树x的最大值, 接着从x向上跳,用w[fa[x]]更新子树fa[x]-子树x最大值, 因为当用w[fa[x]]来更新过子树fa[x]-子树x时,再用它更新就会没有意义,所以打个标记,不再更新.这样就最多只会更新n次. #include <cmath> #include <iostre…
题目 题目大意 给你一个数列,让你找到一个最长的连续子序列,满足在添加了至多KKK个数之后,能够变成一条公差为DDD的等差数列. 思考历程 一眼看上去似乎是一道神题-- 没有怎么花时间思考,毕竟时间都砸到T1和T2上了. 正解 仔细推一下就会发现这种等差数列[j,i][j,i][j,i]有三个简单的条件: 所有数模ddd的余数相同 没有重复的数(d=0d=0d=0的时候除外) max(j,i)−min(j,i)d+1≤i−j+1+k\frac{max(j,i)-min(j,i)}{d}+1\le…
题目 描述 题目大意 给你两个排列AAA和BBB,每次随即选三个数进行轮换操作,问mmm次操作内使AAA变成BBB的概率. 思考历程 首先随便搞一下,就变成了AAA中每个数回归自己原位. 一眼望去,感觉nnn很小-- 最简单的想法是将每个情况都储存起来,然后搞出它们之间的转移情况. 然后发现这些状态是存不下的. 于是我就开始想有没有哪些状态是等价的. 然后我发现对于每个数字,可以简单地归为是否回归原位的两种情况.这样状态倒小了,可是又能怎么转移呢?mmm这么大,肯定打矩阵乘法.这么大的状态还是不…
题目 描述 题目大意 给你一个数列,接下来有许多个操作,使得区间[l1,r1][l_1,r_1][l1​,r1​]和[l2,r2][l_2,r_2][l2​,r2​]对应的位置染上同样的颜色(使得它们相同). 最后输出9∗10颜色数−19*10^{颜色数-1}9∗10颜色数−1 思考历程 首先看到这题就自然而然地往数据结构方面想(废话!) 接着先想平衡树.既然要将这两个区间变成一样的,那就将它们各自放到子树中,然后对于两个子树的根打上标记. 接下来问题就出现了,怎么维护?怎么下传?并且由于它可能…
题目 描述 题目大意 给你一堆aia_iai​和bib_ibi​(方便起见用的变量和上面不一样),让你搞出一个xxx(相当于题目中的ba\frac{b}{a}ab​,随便推推就能知道), 使得max⁡ai+bi+aix+bix\max a_i+b_i+a_ix+\frac{b_i}{x}maxai​+bi​+ai​x+xbi​​最小. 思考历程 第一眼看下去,最大最小放一起,显然就是一个二分啊! 然后开始想--想不出来,推了个式子,感觉似乎要三分套三分套三分-- 更气的是这题还不好打暴力. 所以…