bzoj3495
题解:
对于每一条边的两段都有,很简单
然后处理国家
容易发现前缀和为1
代码:
#include<cstdio>
#include<algorithm>
using namespace std;
inline char nc()
{
static char buf[],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,,stdin),p1==p2)
?EOF:*p1++;
}
int red()
{
int res=,f=;char ch=nc();
while (ch<''||''<ch) {if (ch=='-') f=-f;ch=nc();}
while (''<=ch&&ch<='') res=res*+ch-,ch=nc();
return res*f;
}
const int N=;
int n,e,m,pre[N],tot,lnk[N],son[N*],nxt[N*];
void add(int x,int y){son[++tot]=y;nxt[tot]=lnk[x];lnk[x]=tot;}
int dfn[N],low[N],stk[N],scc[N],Tim,instk[N];
void tarjan(int x)
{
stk[++stk[]]=x;instk[x]=;
dfn[x]=low[x]=++Tim;
for (int j=lnk[x];j;j=nxt[j])
if (!dfn[son[j]]) tarjan(son[j]),low[x]=min(low[x],low[son[j]]);
else if (instk[son[j]]) low[x]=min(low[x],dfn[son[j]]);
if (low[x]==dfn[x])
{
scc[]++;
while (stk[stk[]+]!=x)
instk[stk[stk[]]]=,scc[stk[stk[]--]]=scc[];
}
}
int main()
{
n=red();e=red(),m=red();
for (int i=,x,y;i<=e;i++)
x=red(),y=red(),add(*x+,*y),add(*y+,*x);
for (int i=;i<=m;i++)
{
int k=red(),lst=red();
for (int j=,x;j<k;j++) x=red(),pre[x]=lst,lst=x;
}
for (int i=;i<=n;i++)
{
add(*i,*i+),add(*i+,*i+);
if (pre[i])
{
int j=pre[i];
add(*j+,*i+);add(*i+,*j+);
add(*j+,*i+);add(*i,*j+);
}
}
Tim=;int N=*n+;
for (int i=;i<=N;i++)
if (!dfn[i]) tarjan(i);
for (int i=;i<=N;i++)
if (scc[i]==scc[i^]) return printf("NIE"),;
printf("TAK");
return ;
}
bzoj3495的更多相关文章
- BZOJ3495 PA2010 Riddle 【2-sat】
题目链接 BZOJ3495 题解 每个城市都有选和不选两种情况,很容易考虑到2-sat 边的限制就很好设置了,主要是每个郡只有一个首都的限制 我们不可能两两之间连边,这样复杂度就爆炸了 于是乎就有了一 ...
- BZOJ3495 : PA2010 Riddle
2-SAT. 建立n个变量,其中第i个变量表示第i个城市是否是首都. 对于边(x,y),连边x->y',y->x'. 对于一个有y个城市的国家,新建2y个变量,分别表示前i个城市和后i个城 ...
- 【BZOJ3495】PA2010 Riddle
题目大意 有\(n\)个城镇被分成了\(k\)个郡,有\(m\)条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. 题目分析 每条边至少有一个端点是首都,每个郡至多 ...
- BZOJ-3495 前缀优化建图2-SAT
题意:有n个城镇被分成了k个郡,有m条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. 解法:以前没学过,参考https://blog.csdn.net/linkf ...
随机推荐
- 写入Csv
//定义文件输出流 FILE *f; f = fopen("a.csv" , "wb"); fprintf(f,"aaa,23,sdf\n" ...
- 你知道C语言为什么会有“_”(下划线)吗?
学过C语言的都知道,变量名只能由字母.数字.下划线组成,且只能以字母或者下划线开头. 学英语时我们都学过连字符(“-”),这个东东主要用来连接单词的.那么C语言为什么不直接 用连字符,而要改用下划线呢 ...
- message from server: "Host '192.168.6.68' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts
系统或者程序连接数据报错 null, message from server: "Host '192.168.6.68' is blocked because of many connect ...
- 《Java程序设计》 第2周学习总结
20145318 <Java程序设计>第2周学习总结 教材学习内容总结 short,2字节:int,4字节:long,8字节:byte,1字节:float,4字节:double,8字节:c ...
- 20145329《Java程序设计》第六周学习总结
教材学习内容总结 第十章 InputSream与OutputStream Java中,输入串流代表对象为java.io.InputStream实例,输出串流代表对象为java.io.OutputStr ...
- 试编hello world
这里是一些vim的使用方法: 这时不知道怎么编译了 看了上面的知识 也问了志伟,我就知道了.是要“./hello”就可以了 自己敲了代码,今后也会多试运行,编译,得尽快安装虚拟机了.
- C teaching
L1 Preparation 1. environment codeblocks 2.variable, const 3. data type int "%d" char &quo ...
- Jquery12 Ajax
学习要点: 1.Ajax 概述 2.load()方法 3.$.get()和$.post() 4.$.getScript()和$.getJSON() 5.$.ajax()方法 6.表单序列化 Ajax ...
- 分分钟解决 MySQL 查询速度慢与性能差
一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSecond意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的 ...
- 转载:poj题目分类(侵删)
转载:from: POJ:http://blog.csdn.net/qq_28236309/article/details/47818407 按照ac的代码长度分类(主要参考最短代码和自己写的代码) ...