首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
BZOJ3495 : PA2010 Riddle
】的更多相关文章
BZOJ3495 PA2010 Riddle 【2-sat】
题目链接 BZOJ3495 题解 每个城市都有选和不选两种情况,很容易考虑到2-sat 边的限制就很好设置了,主要是每个郡只有一个首都的限制 我们不可能两两之间连边,这样复杂度就爆炸了 于是乎就有了一个非常厉害的方法: 前缀后缀和 我们令\(1\)表示选,\(0\)表示不选,维护一个郡的前缀和.后缀和 一个点如果作为首都,那么它和它对应前缀后缀和的位置一定为\(1\),且之前的位置一定为\(0\) 然后再加上一些前缀后缀和固有的限制 就可以\(A\)啦 这样的建图太神了 #include<alg…
BZOJ3495 : PA2010 Riddle
2-SAT. 建立n个变量,其中第i个变量表示第i个城市是否是首都. 对于边(x,y),连边x->y',y->x'. 对于一个有y个城市的国家,新建2y个变量,分别表示前i个城市和后i个城市中是否有首都. 然后求出SCC,判断是否存在合法的方案即可,时间复杂度$O(n+m)$. #include<cstdio> const int N=1000010,M=6000010; int n,m,k,i,x,y,tot,f[N][2],pre[N][2],suf[N][2],q[M],t,…
3495: PA2010 Riddle
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.由于每个郡…
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 ***************************…
【BZOJ3495】PA2010 Riddle
题目大意 有\(n\)个城镇被分成了\(k\)个郡,有\(m\)条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. 题目分析 每条边至少有一个端点是首都,每个郡至多一个首都,很容易想到\(2-sat\)判定. 考虑如何建边.我们用\(x\)表示在编号为\(x\)的节点建首都,\(x'\)表示不在该点建首都. 对于一条边的两个端点,若左端点\(l\)不为首都,则右端点\(r\)必为首都:右端点同理,因此\(l\)向\(r'\)连边,\(r\)向\(l'\)连边.…
【BZOJ】3495: PA2010 Riddle
题意 \(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…
【bzoj 3495】PA2010 Riddle
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,否则…
BZOJ.3495.[PA2010]Riddle(2-SAT 前缀优化建图)
题目链接 每个城市要么建首都要么不建,考虑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]'是…
【刷题】BZOJ 3495 PA2010 Riddle
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,否…
【BZOJ】3495: PA2010 Riddle 2-SAT算法
[题意]有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+…