题解:

对于每一条边的两段都有,很简单

然后处理国家

容易发现前缀和为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的更多相关文章

  1. BZOJ3495 PA2010 Riddle 【2-sat】

    题目链接 BZOJ3495 题解 每个城市都有选和不选两种情况,很容易考虑到2-sat 边的限制就很好设置了,主要是每个郡只有一个首都的限制 我们不可能两两之间连边,这样复杂度就爆炸了 于是乎就有了一 ...

  2. BZOJ3495 : PA2010 Riddle

    2-SAT. 建立n个变量,其中第i个变量表示第i个城市是否是首都. 对于边(x,y),连边x->y',y->x'. 对于一个有y个城市的国家,新建2y个变量,分别表示前i个城市和后i个城 ...

  3. 【BZOJ3495】PA2010 Riddle

    题目大意 有\(n\)个城镇被分成了\(k\)个郡,有\(m\)条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. 题目分析 每条边至少有一个端点是首都,每个郡至多 ...

  4. BZOJ-3495 前缀优化建图2-SAT

    题意:有n个城镇被分成了k个郡,有m条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. 解法:以前没学过,参考https://blog.csdn.net/linkf ...

随机推荐

  1. error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1700”

    原因:由于你使用了vs2012,相比较vs2010以及之前的vs为更高版本,致使msvc不兼容! 方法:在项目右键属性-配置属性-常规中,平台工具集选用为合适平台即可,我这里就选择 vs2010 (v ...

  2. spark[源码]-任务调度源码分析[三]

    前言 在上一篇文章中,我主要是讲解了DAG阶段的处理,spark是如何将一个job根据宽窄依赖划分出多个stage的,在最后一步中是将生成的TaskSet提交给了TaskSchedulerInmpl的 ...

  3. SpringMVC项目配置

    一.创建一个maven项目 1.new一个maven项目,选择next,如图:

  4. USB Transfer and Packet Sizes

    https://msdn.microsoft.com/en-us/library/ff538112.aspx http://blog.csdn.net/chenyujing1234/article/d ...

  5. 【Head First Servlets and JSP】笔记 27: web 应用安全

    典型的安全问题:假冒者.窃听者.非法升级者 认证方式: Base64 .摘要认证 .客户端证书.表单认证,重点熟悉摘要算法( HASH . MD5 等) 安全机制:授权.认证.数据完整性.机密性 80 ...

  6. mybatis家族

    mybatis 优秀的持久层框架,它支持定制化SQL.存储过程以及高级映射. 备注:通过mapper实现数据库与实体类相互映射 MyBatis 避免了几乎所有的JDBC 代码和手动设置参数以及获取结果 ...

  7. 20145215刘俊谦实验五 Java网络编程及安全

    实验内容 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验步骤 本次实验由两人组队完成,20145321曾子誉是我本次实验的搭档,链接为:http://www.cnblog ...

  8. linux安全第一周总结——20135227黄晓妍

    实验部分: 我将源代码做了修改,将其中一个数字修改为我学号27 2.在实验楼环境下将其保存为text.c并将其编译,得到text.s 3.将.开头的多余的语句删去了之后,我得到了32位环境的汇编代码 ...

  9. Linux读书笔记1/2章

    linux的内核设计: 第一章 1.1Linux历史: 历经时间的考验,今天Unix已经发展成一个支持抢占式多任务.多线程.虚拟内存.换页.动态链接.TCP/Ip网络的现代化操作系统. 1.2追寻Li ...

  10. Eclipse FindBugs插件

    在线安装: Update Site:http://findbugs.cs.umd.edu/eclipse 本地安装: 1.首先从findbugs网站下载插件:http://findbugs.sourc ...