题面 传送门 题解 我们先来考虑一个联通块,这些关系显然可以写成一个异或方程组的形式,形如\(\oplus_{e\in edge_u}x_e=col_u\) 如果这个联通块的黑色点个数为奇数,那么显然这个方程是无解的 证明:每条边都在方程组的左边出现了两次,左边全部异或起来为\(0\),右边全部异或起来为\(1\),显然无解 那么如果这个方程组有解,解的个数就是\(2^{自由元数目}\) 我们随便求出这个联通块的一棵生成树,把所有树边当成自由元,容易发现对于非树边的每一种选法,树边都有一种唯一对…
P4494 [HAOI2018]反色游戏 题意 给你一个无向图,图上每个点是黑色或者白色.你可以将一条边的两个端点颜色取反.问你有多少种方法每个边至多取反一次使得图上全变成白色的点. 思路 若任意一个连通块黑色点的个数为奇数那么无解. 先考虑树的情况.发现如果是树,并且黑点个数为偶数,有且仅有一种方式达到目标.然后发现,对于一个无向图,它的任意一个生成树若有解,那么其他非树边无论是否取反都有且仅有一种情况达到目标,并且充分.所以答案就是 \(2^{m-n+1}\). 考虑不联通的情况,每多一个连…
暴力做法是列异或方程组后高斯消元,答案为2^自由元个数,可以得60分.但这个算法已经到此为止了. 从图论的角度考虑这个问题,当原图是一棵树时,可以从叶子开始唯一确定每条边的选择情况,所以答案为1. 于是首先,对一个连通块,若其中黑点个数为奇数则必然无解,否则考虑求出它的一棵生成树.然后当我们选择一条非树边(u,v)时,只需要将树上u,v两点间的所有边的选取情况取反,就又得到一个合法方案.于是答案为$2^{m-n+1}$.进一步可以发现,设原图连通块个数为c,则答案为$2^{m-n+c}$. 现在…
[BZOJ5303][HAOI2018]反色游戏(Tarjan,线性基) 题面 BZOJ 洛谷 题解 把所有点全部看成一个\(01\)串,那么每次选择一条边意味着在这个\(01\)串的基础上异或上一个有\(2\)个\(1\)的\(01\)串. 那么把边构建线性基,最终的答案显然就是\(2\)的不在线性基里的边数次方. 显然每次只需要考虑一个联通块,一个联通块随便拉出一棵生成树,就可以在线性基上确定\(n-1\)个元,那么对于其他边任意的情况,显然可以通过修改这\(n-1\)条边的选择情况使得最终…
bzoj 5393 [HAOI2018] 反色游戏 Link Solution 最简单的性质:如果一个连通块黑点个数是奇数个,那么就是零(每次只能改变 \(0/2\) 个黑点) 所以我们只考虑偶数个黑点的连通块 如果是一棵树,那么方案只有一种,因为所有叶子颜色都确定,可以自底向上一层层推出每一条边是否反色 下面考虑一个图,随便找一棵生成树,那么如果其他非树边都不反色就只有一种.假设其它非树边是否反色都已确定,那么相当于这棵生成树的每个点的初始颜色确定,所以每一种非树边的选取方案都对应着一种反色方…
题目传送门:loj bzoj 题意中的游戏方案可以转化为一个异或方程组的解,将边作为变量,点作为方程,因此若方程有解,方程的解的方案数就是2的自由元个数次方.我们观察一下方程,就可以发现自由元数量=边数-点数+连通块数,或者换句话说,若对原图的每个联通块指定一棵生成树,那么确定了生成树之外的边是否进行操作,那么生成树内的边的操作方案就是一定存在并唯一确定的. 那么我们就只需要判断一下什么样的图无解.我们发现每对一条边进行操作,原图内的黑点数量奇偶性不变,那么我们只需判断图中的是否存在某个联通块有…
题目链接 LOJ:https://loj.ac/problem/2524 BZOJ:https://lydsy.com/JudgeOnline/problem.php?id=5303 洛谷:https://www.luogu.org/problemnew/show/P4494 Solution 精神污染 假设所有点都是连通的,很显然如果黑点个数为奇数个则无解,否则可以证明一定有解. 那么随便整出一棵生成树,然后反色一些边使其合法,显然一棵树只有一种情况. 考虑非树边的贡献,如果非树边不反色显然无…
Description Solution 对于一个有偶数个黑点的连通块,只需要任意两两配对,并把配对点上的任一条路径取反,就可以变成全白了 如果存在奇数个黑点的连通块显然无解,判掉就可以了 如果有解,解的数量肯定是一样的(白点被取反偶数次,黑点奇数次) 一共有 \(2^{m}\) 种染色方案,有 \(2^{n-1}\) 把点染成偶数个白色的方案,因为每一种方案可以产生的解是一样的,那么就有 \(2^{m-n+1}\) 种解 所以对于每一个连通块产生的贡献就是 \(2^{m-n+1}\),如果有…
[Luogu4494] [BZOJ5303] [LOJ2524] LOJ有数据就是好 原题解,主要是代码参考 对于每一个联通块(n个点),其他的边一开始随便选,只需要n-1条边就可以确定最终结果. 所以设\(cnt\)为联通块数 , 答案为 \(2^{m-n+cnt}\) 还有就是有解的情况必须是黑点个数为偶数,还要注意有删掉这个点可能使无解变有解,这比从有解变无解更难想 #include<cstdio> #include<iostream> #include<cstring…
题目传送门 题目大意 给出一个 \(n\) 个点 \(m\) 条无向边的图,每个点都有一个 \(\in [0,1]\) 的权值,每次可以选择一条边,然后将该边相连两点权值异或上 \(1\).问有多少种选择方法使得每个点的权值都变为 \(0\).(每条边只能选择一次) 但是这个问题太简单了,所以你要求删掉每个点以及它连出的边之后的答案. 有 \(t\) 组数据,\(t\le 5,n,m\le 10^5\). 思路 这道题不是很难写,但是很难想. 我们先考虑一棵树的答案,你发现这样方案是唯一的,因为…
首先发现对于一个联通块有奇数个黑点,那么总体来说答案无解.这个很容易想,因为对每个边进行操作会同时改变两个点的颜色,异或值不变. 然后一个朴素的想法是写出异或方程进行高斯消元. 可以发现高斯消元的过程实际上就是合并两个点的过程,如果是一棵树的话那么答案一定是2. 对于树上每多的一条边,它在合并点的过程中会被消除掉,这意味着这个是一个自由元.所以我们发现连通图的答案是$2^{m-n+1}$. 这样第一问答案就可以求了.判完无解后答案为$2^{m-n+d}$,$d$为联通块数. 对于第二问,如果有超…
洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要使用它需要一定的费用.m条单向通道连接相邻的两对情侣所在电影院.然后HXY有个绝技,如果她能从一个点开始烧,最后回到这个点,那么烧这条回路上的情侣的费用只需要该点的汽油费即可.并且每对情侣只需烧一遍,电影院可以重复去.然后她想花尽…
题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间之里由N个村庄(编号为1..N)和M条道路组成,道路分为两种一种为单向通行的,一种为双向通行的,分别用1和2来标记.如果存在由村庄A到达村庄B的通路,那么我们认为可以从村庄A到达村庄B,记为(A,B).当(A,B)和(B,A)同时满足时,我们认为A,B是绝对连通的,记为<A,B>.绝对连通区域是指…
[洛谷5008]逛庭院(Tarjan,贪心) 题面 洛谷 题解 如果图是一个\(DAG\),我们可以任意选择若干个不是入度为\(0\)的点,然后把它们按照拓扑序倒序删掉,不难证明这样一定是合法的. 现在的问题是出现了\(SCC\),我们缩点之后\(SCC\)形成了一个\(SCC\),我们还是贪心考虑,显然不是入度为\(0\)的\(SCC\)仍然可以类似上面的任意删点,只需要按照\(SCC\)的拓扑序倒序处理,对于入度为\(0\)的\(SCC\),至少要留下一个点,那么这样子就可以判断了. #in…
洛谷题目链接:[HAOI2018]染色 题目背景 HAOI2018 Round2 第二题 题目描述 为了报答小 C 的苹果, 小 G 打算送给热爱美术的小 C 一块画布, 这块画布可 以抽象为一个长度为 \(N\) 的序列, 每个位置都可以被染成 \(M\) 种颜色中的某一种. 然而小 C 只关心序列的 \(N\) 个位置中出现次数恰好为 \(S\) 的颜色种数, 如果恰 好出现了 \(S\) 次的颜色有 \(K\) 种, 则小 C 会产生 \(W_k\) 的愉悦度. 小 C 希望知道对于所有可…
洛谷题目链接:[HAOI2018]苹果树 题目背景 HAOI2018 Round2 第一题 题目描述 小 C 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 C 发现每一天这棵树都会生长出一个新的结点. 第一天的时候, 果树会长出一个根结点, 以后每一天, 果树会随机选择一个当前树中没有长出过结点 的分支, 然后在这个分支上长出一个新结点, 新结点与分支所属的结点之间连接上一条边. 小 C 定义一棵果树的不便度为树上两两结点之间的距离之和, 两个结点之间…
题面 洛谷 题解 \(f[i][j]\)表示有i个人参与游戏,从庄家(即1)数j个人获胜的概率是多少 \(f[1][1] = 1\) 这样就可以不用讨论淘汰了哪些人和顺序 枚举选庄家选那张牌, 枚举下一次的庄家 可以得到这次的庄家 然后转移即可 Code #include<bits/stdc++.h> #define LL long long #define RG register using namespace std; template<class T> inline void…
洛谷 题目就是让我们在DAG中找到一些点,覆盖所有点. 因为是DAG,可以想到tarjan缩一下点.假设我们需要找x个点,那么答案就是(n-x)/n. 我们怎么选点呢? 敏锐的我们很快就能想到,直接选出所有入度为0的点. 但是,当我们发现一个入度为0的点,但是其中元素为1,而它的出边所到的点的入度都>1,则x--. 因为它们可以被别的点更新. code: #include <bits/stdc++.h> using namespace std; const int N=100010; c…
题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级玛丽中的一个场景. ******** ************ ####....#. #..###.....##.... ###.......###### ### ### ........... #...# #...# ##*####### #.#.# #.#.# ####*******###### #.#.# #.#.#…
题目描述 给出一个n个点,m条边的无向图,求图的割点. 关于割点 在无向连通图中,如果将其中一个点以及所有连接该点的边去掉,图就不再连通,那么这个点就叫做割点(cut vertex / articulation point). 题解 在一个无向图里的割点分为两种,第一种就是一棵树的根节点并且他的度要大于等于2,删去这个点他的子树就不连通了(如上图的1号点). 第二种就要用到tarjan算法的思想,tarjan求出每个点的dfs顺序,然后记录他子树中能访问到的dfn最早的点.如果一个点不为根且他的…
BZOJ原题链接 洛谷原题链接 我们可以倒着来\(DP\). 设\(f[i][j]\)表示剩余\(i\)个人,从庄家数起第\(j\)个人的胜率,设当前枚举到第\(k\)张牌,该情况下这一轮淘汰的位置为\(x\),则有状态转移方程: \(\qquad\qquad f[i][j] = f[i][j] + \dfrac{f[i - 1][i - x + j]}{m}, (x > j)\) \(\qquad\qquad f[i][j] = f[i][j] + \dfrac{f[i - 1][j - x]…
题目链接:https://www.luogu.org/problemnew/show/P1247 题意:nim取石子的题意,多了一个判断先手赢的话,输出先手第一把怎么拿,以及拿完之后每堆还剩多少. 题解:异或和为0直接lose.不为0的话,看res xor a[i]的值如果小于a[i]说明可以取该堆,也就是取a[i] - (res xor a[i])这么多.剩余的就是res xor a[i]. 证明..洛谷题解的大佬写的挺好的..QAQ 代码: #include <iostream> #inc…
题目 洛谷 4424 分析 感觉思路比较神仙. 对于按位与和按位或两种运算,显然每一位是独立的,可以分开考虑. 对于某一位,「与 \(0\)」会将这一位变成 \(0\),「或 \(1\)」会将这一位变成 \(1\) ,「与 \(1\)」和「或 \(0\)」不会改变这一位的值.前两种操作会改变这一位的值,而后两种不会.将前两种称为「关键操作」,那么某一位最终的值取决且仅取决于这一位的最后一次「关键操作」是「与 \(0\)」还是「或 \(1\)」.如果是前者或者不存在关键操作,最终的值就是 \(0\…
洛谷题面传送门 SDOI 2017 R2 D1 T3,nb tea %%% 讲个笑话,最近我在学动态 dp,wjz 在学 FWT,而我们刚好在同一天做到了这道题,而这道题刚好又是 FWT+动态 dp 首先考虑怎样暴力计算答案,我们记 \(dp_{u,j}\) 表示以 \(u\) 为根的子树中有多少个连通块包含 \(u\) 且权值的异或和为 \(j\),初始 \(dp_{u,val_u}=1\),每次遍历 \(u\) 的一个子树 \(v\) 就对这个子树就对这两个子树的 \(dp\) 做一个合并,…
题解 如果一个联通块是一个树的话,方案数就一种,如果这个联通块还有别的边,那选了一条别的边就会把树上对应路径全部取反,所以方案数是\(2^{m - n + 1}\) 如果联通块数为\(c\)方案数为\(2^{m - m + c}\) 一个联通块有奇数个黑点一定为0 然后就对于每个点判断是不是割点,是的话看看分成的联通块有几个包含奇数个黑点 然后如果不是割点看看删掉这个点后联通块黑点个数的奇偶性改没改变 同时要特判联通块里只有一个点的情况 代码 #include <bits/stdc++.h>…
P4819 [中山市选]杀人游戏 思路分析 题意最开始理解错了(我太菜了) 把题意简化一下,就是找到可以确定杀手身份的最小的危险查看数 (就是不知道该村名的身份,查看他的身份具有危险的查看数量),用 该数除以总人数,保留6位小数,我们将每个村名和他认识的人之间 连接一条有向边,得到一个有向图,考虑到图中带有环,因为查看一 个人的身份时我们便可以知道他认识的人的具体身份,所以针对一个 环我们只要查看任意一人的身份就可以无危险的得知剩余其他人的身 份,且只有第一次查看为危险查看,我们可以看出将环缩为…
正题 题目链接:https://www.luogu.com.cn/problem/P4494 题目大意 给出\(n\)个点\(m\)条边的一张无向图,节点有\(0/1\),每条边可以选择是否取反两边的点. 开始求将所有节点变为\(0\)的方案,然后对于每个点询问删去这个点之后的方案 \(1\leq T\leq 5,1\leq n,m\leq 10^5\) 解题思路 图的比较麻烦,先考虑树上的,那么每条边取不取反取决于它连接的子节点的黑白,但是根节点却无法这么调整.所以如果黑色个数为奇数个那么方案…
题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了).这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题. 输入输出格式 输入格式: 一行内输入一串整数,以0结束,以空格间隔. 输出格式: 一行内倒着输出这一串整数,以空格间隔. 输入输出样例 输入样例#1: 3 65 23 5 34 1…
题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了).这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题. 输入格式 一行内输入一串整数,以0结束,以空格间隔. 输出格式 一行内倒着输出这一串整数,以空格间隔. 输入输出样例 输入 #1 3 65 23 5 34 1 30 0 输出 #1…
题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game called Xoinc for them. Initially a stack of N (5 <= N <= 2,000) coins sits on the ground; coin i from the top has integer value C_i (1 <= C_i <=…