BZOJ3495 PA2010 Riddle 【2-sat】
题目链接
BZOJ3495
题解
每个城市都有选和不选两种情况,很容易考虑到2-sat
边的限制就很好设置了,主要是每个郡只有一个首都的限制
我们不可能两两之间连边,这样复杂度就爆炸了
于是乎就有了一个非常厉害的方法:
前缀后缀和
我们令\(1\)表示选,\(0\)表示不选,维护一个郡的前缀和、后缀和
一个点如果作为首都,那么它和它对应前缀后缀和的位置一定为\(1\),且之前的位置一定为\(0\)
然后再加上一些前缀后缀和固有的限制
就可以\(A\)啦
这样的建图太神了
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 6000005,maxv = 1000005,maxm = 15000005,INF = 1000000000;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
int n,m,K,N,pre[maxv][2],sa[maxv][2],p[maxv][2];
int dfn[maxn],low[maxn],Scc[maxn],st[maxn],top,scci,cnt;
int h[maxn],ne;
struct EDGE{int to,nxt;}ed[maxm];
inline void build(int u,int v){ed[++ne] = (EDGE){v,h[u]}; h[u] = ne;
}
void dfs(int u){dfn[u] = low[u] = ++cnt;st[++top] = u;Redge(u){if (!dfn[to = ed[k].to]){dfs(to);low[u] = min(low[u],low[to]);}else if (!Scc[to]) low[u] = min(low[u],dfn[to]);}if (dfn[u] == low[u]){scci++;do{Scc[st[top]] = scci;}while (st[top--] != u);}
}
int main(){n = read(); m = read(); K = read();REP(i,n) p[i][0] = ++N,p[i][1] = ++N;int a,b;while (m--){a = read(); b = read();build(p[a][0],p[b][1]);build(p[b][0],p[a][1]);}int x,u;while (K--){x = read();REP(i,x){pre[i][0] = ++N,pre[i][1] = ++N;sa[i][0] = ++N,sa[i][1] = ++N;}REP(i,x){u = read();build(p[u][1],pre[i][1]); build(pre[i][0],p[u][0]);build(p[u][1],sa[i][1]); build(sa[i][0],p[u][0]);if (i < x){build(p[u][1],sa[i + 1][0]); build(sa[i + 1][1],p[u][0]);build(pre[i][1],pre[i + 1][1]); build(pre[i + 1][0],pre[i][0]);}else build(pre[i][0],pre[i][1]);if (i > 1){build(p[u][1],pre[i - 1][0]); build(pre[i - 1][1],p[u][0]);build(sa[i][1],sa[i - 1][1]); build(sa[i - 1][0],sa[i][0]);}else build(sa[i][0],sa[i][1]);}}for (int i = 1; i <= N; i++) if (!dfn[i]) dfs(i);for (int i = 1; i <= N; i += 2)if (Scc[i] == Scc[i + 1]){puts("NIE");return 0;}puts("TAK");return 0;
}
转载于:https://www.cnblogs.com/Mychael/p/9091629.html
BZOJ3495 PA2010 Riddle 【2-sat】相关推荐
- 【American English】美式发音,英语发音,美国音音标列表及发音
1 [American English]美式发音,英语发音,美国音音标列表及发音 2 [American English]美语的连读规则 3 [American English]美语口语中常见的 Go ...
- 【计算理论】计算理论总结 ( P 、NP 、NPC 总结 ) ★★
文章目录 一.P 类 二.NP 类 三.NPC 类 ( NP 完全 ) 四.P .NP .NPC 三者关系 一.P 类 P\rm PP 类 : ★ 所有 能够被 确定性 单个带子图灵机 , 在 多项式 ...
- 【计算理论】计算复杂性 ( 多项式时间规约 | NP 完全 ★ | 布尔可满足性问题 ) ★
文章目录 一.多项式时间规约 分析 二.NP 完全 ★ ( 计算理论最重要的概念 ) 一.多项式时间规约 分析 多项式时间规约概念 : [计算理论]计算复杂性 ( 多项式等价引入 | 多项式时间规约 ...
- 实战SSM_O2O商铺_41【前端展示】店铺列表页面Dao+Service+Controller层的实现
文章目录 概述 Dao层 接口 映射文件 单元测试 Service层 接口方法 单元测试 Controller层 增加 ShopListController 单元测试 Github地址 概述 在完成了 ...
- 【Linux部署】NTP时间服务器搭建及Linux+Windows客户端使用(一篇学会使用NTP服务)
1.什么是NTP 百度百科:网络时间协议,英文名称:Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同 ...
- 【js实例】Array类型的9个数组方法,Date类型的41个日期方法,Function类型
前文提要:[js实例]js中的5种基本数据类型和9种操作符 Array类型的9个数组方法 Array中有9个数组方法: 1.检测数组 2.转换方法 3.栈方法 4.队列方法 5.冲排序方法 6.操作方 ...
- 【Applied Algebra】可满足性模理论(Satisfiability Modulo Theories)入门
[Applied Algebra]可满足性模理论(Satisfiability Modulo Theories)入门 摘要:SMT问题是在特定理论下判定一阶逻辑公式可满足性问题.它在很多领域,尤其是形 ...
- 【Typescript专题】之类型进阶
[Typescript专题]之类型进阶 本篇文章是<Typescript 专题>第一篇,本篇文章主要聊一聊基本类型相关的扩展,毕竟随着文章的加深,我在阅读官方文档的时候经常会见到陌生的声明 ...
- 非此即彼的逻辑错误_Argument常见逻辑错误及描述 【出国英语】
Argument常见逻辑错误及描述 [出国英语] 1.Loose generalizations 过于宽泛的概括 医学教育网 Drawing conclusions about groups of p ...
最新文章
- NOIP2018 集训(一)
- java 线程中断(转)
- css03层次选择器
- 科技日报头版显要位置报道国内多家企业投融资给力永中软件
- 编译Bitcoin BCH configure: error: libdb_cxx headers missing ,终于解决了
- Bob的烦恼II 逃离迷宫
- 打造“神犇”是教育的未来吗?
- hdfs haadmin使用,DataNode动态上下线,NameNode状态切换管理,数据块的balance,HA下hdfs-api变化(来自学习资料)...
- openwrt qca9886 ath10k只能连32台设备问题解决
- SI4463配置软件wds3
- 学plc还是学java_要学PLC想走PLC工程师之路的看看
- 图片服务器-存储图片技巧
- C语言乘方,平方根的使用
- 浏览器的储存方式有哪些
- 56 案例淘宝焦点图布局 网页布局总结
- freenom又行了-免费顶级域名白嫖一年,赶紧看看如何申请
- mysql学生表_课程表_选课表,连表查询
- 数据分析——用户流失分析
- SQL查询实现,记录排序编号
- win7 、IIS7.0 搭建ASP网站