3495: PA2010 Riddle 2-sat 前缀优化】的更多相关文章

3495: PA2010 Riddle 2-sat 前缀优化 链接 bzoj 思路 不想说啥了,看hwim的吧,我去睡觉了zZ. 代码 /************************************************************** Problem: 3495 User: gryz2016 Language: C++ Result: Accepted Time:19152 ms Memory:178896 kb ***************************…
3495: PA2010 Riddle 链接 分析: 每个点要么建首都,要么不建,并且一个点建了,会导致一些点不能建.所以可以考虑2-sat. 但是如果在每个郡里两两连边,边数是n^2的. 考虑用前缀优化. S[i]表示对于当前郡,前i个点中是否存在一个首都,A[i]表示i这个点是否建首都. 1.那么有A[i]=1,则S[i]=1,同样有它的逆否命题:S[i]=0,则A[i]=0. 2.根据前缀的性质有S[i-1]=1,则S[i]=1,逆否命题:S[i]=0,则S[i-1]=0. 3.由于每个郡…
题目链接 每个城市要么建首都要么不建,考虑2-SAT 这样一个国家内城市两两连边是很显然的,但是边数为O(n^2) 每个国家中仅有一个建首都,考虑新建前缀S[i]=1/0这2n个点表示当前国家的[1,i]中建了/没建首都 现在考虑这些限制:(A[i]=1/0表示i城市建/不建) 0.若A[i]=1,则S[i]=1:若S[i]=0,则A[i]=0(对于i自己) 1.若A[i]=1,则S[i-1]=0:若S[i-1]=1,则A[i]=0 (一个国家一个首都的限制)(前者由A[i]->A[i-1]'是…
Description 有n个城镇被分成了k个郡,有m条连接城镇的无向边. 要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. Input 第一行有三个整数,城镇数n(1<=n<=10^6),边数m(0<=m<=10^6),郡数k(1<=k<=n). 接下来m行,每行有两个整数ai和bi(ai≠bi),表示有一条无向边连接城镇ai和bi. 接下来k行,第j行以一个整数wj开头,后面是wj个整数,表示第j个郡包含的城镇. Output 若有解输出TAK,否…
[题意]有n个城镇被分成了k个郡,有m条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都.n,m,k<=10^6. [算法]2-SAT,前后缀优化建图 [题解]每个城镇只有作为首都和不是首都两种选项,即2-sat问题. 2-sat问题中所有边必须加反向边,下面过程忽略反向边. 对于一条边(x,y),如果x是0,那么y必须是1,即x-y'.(y-x'是反向边,考虑的时候忽略) 但是一个郡只有一个首都有点烦,有一种套路叫前后缀优化建图. 对于每个点x,假设一个点x+…
题意 \(n(1 \le n \le 1000000)\)个城市,\(k(1 \le k \le n)\)个国家,\(m(1 \le m \le 1000000)\)条边.要求每个国家有且仅有一个首都,每条边两端的城市至少要有一个首都.判断是否有解. 分析 满足性问题.而且每个城市只有两种情况,首都or不是首都.所以考虑2-sat 题解 对于每一个点,拆点为\(i\)和\(i'\),表示有首都和无首都. 对于每一个国家(假设有\(a\)个城市),由于只有一个首都,也就是说,假设这个国家的第\(j…
题目链接 https://codeforces.com/problemset/problem/1007/D 题解 其实这道题本身还是挺简单的,这里只是记录一下 2-SAT 的前缀优化建图的相关内容. 由于问题的本质是给定许多二元集合,判断是否能从每一个二元集合中选出一个元素,使得所有选出的元素合法,因此考虑使用 2-SAT 解决该问题. 不难发现,使用 2-SAT 解决该问题的复杂度瓶颈在于建图. 我们为每一种颜色 \(i\) 对应的两条路径赋上编号.首先,我们需要为每一条树边记录包含该条边的所…
题目大意 有\(n\)个城镇被分成了\(k\)个郡,有\(m\)条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. 题目分析 每条边至少有一个端点是首都,每个郡至多一个首都,很容易想到\(2-sat\)判定. 考虑如何建边.我们用\(x\)表示在编号为\(x\)的节点建首都,\(x'\)表示不在该点建首都. 对于一条边的两个端点,若左端点\(l\)不为首都,则右端点\(r\)必为首都:右端点同理,因此\(l\)向\(r'\)连边,\(r\)向\(l'\)连边.…
大意: $n$个城市, $m$种核电站, 第$i$种假设要建在第$x$个城市, 必须满足$[x-i,x+i]$范围内无其他核电站, 求建核电站的方案数. 简单$dp$题, 设$dp[i][j]$为位置$i$建第$j$种核电站的方案数. 枚举上一个核电站的位置来转移, 有: $dp[i][1]=1+dp[i-2][1]+\sum\limits_{k=1}^2 dp[i-3][k]+\sum\limits_{k=1}^3dp[i-4][k]+...$ $dp[i][j]=dp[i][j-1]-\su…
Description 有n个城镇被分成了k个郡,有m条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. Input 第一行有三个整数,城镇数n(1<=n<=10^6),边数m(0<=m<=10^6),郡数k(1<=k<=n). 接下来m行,每行有两个整数ai和bi(ai≠bi),表示有一条无向边连接城镇ai和bi. 接下来k行,第j行以一个整数wj开头,后面是wj个整数,表示第j个郡包含的城镇. Output 若有解输出TAK,否则…