首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
bzoj3495
】的更多相关文章
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,…
bzoj3495
题解: 对于每一条边的两段都有,很简单 然后处理国家 容易发现前缀和为1 代码: #include<cstdio> #include<algorithm> using namespace std; inline char nc() { ],*p1=buf,*p2=buf; ,,stdin),p1==p2) ?EOF:*p1++; } int red() { ,f=;char ch=nc(); '<ch) {if (ch=='-') f=-f;ch=nc();} +ch-,ch…
【BZOJ3495】PA2010 Riddle
题目大意 有\(n\)个城镇被分成了\(k\)个郡,有\(m\)条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. 题目分析 每条边至少有一个端点是首都,每个郡至多一个首都,很容易想到\(2-sat\)判定. 考虑如何建边.我们用\(x\)表示在编号为\(x\)的节点建首都,\(x'\)表示不在该点建首都. 对于一条边的两个端点,若左端点\(l\)不为首都,则右端点\(r\)必为首都:右端点同理,因此\(l\)向\(r'\)连边,\(r\)向\(l'\)连边.…
BZOJ-3495 前缀优化建图2-SAT
题意:有n个城镇被分成了k个郡,有m条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. 解法:以前没学过,参考https://blog.csdn.net/linkfqy/article/details/76242377的解法,涨姿势了.首先普通的建图,对于一个国家只能有一个首都,朴素的想法是如果选一个点为首都那么这个国家其他点都不能选,这样建图是n^2的显然会爆空间加超时.这里用到一种加前缀优化建图的技巧,主要是我们观察朴素建图有很多重复的浪费边,像在这个首都…