题解:

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

然后处理国家

容易发现前缀和为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. 防止 IOS 和 安卓 自动锁屏

    Ios代码 在文件AppController中的 didFinishLaunchingWithOptions函数中加一行代码即可: [[UIApplication sharedApplication] ...

  2. maven 介绍(二)

    本文内容主要摘自:http://www.konghao.org/index 内部视频 三.仓库 仓库:本地仓库:远程仓库:私有仓库(nexus) 1. nexus 的安装: 1). 下载并且解压缩 2 ...

  3. centos下删除名称为乱码的文件

    1.通过ls -li 获取要删除乱码文件名文件的inode号,比如得到的是 146506

  4. Python爬虫学习笔记之爬虫基础库

    知识预览 beautifulsoup的简单使用 beautifulsoup的遍历文档树 beautifulsoup的搜索文档树 beautifulsoup的css选择器 回到顶部 beautifuls ...

  5. CentOS修改时区、日期、时间

    一.时区 显示时区 date --help 获取帮助 date -R date +%z 修改时区 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ...

  6. Vue限制输入框只能输入整数

    首先,得明确监听input输入框变化的方法是input,不是change. 方案一:type= "number" 作用: 成功禁止输入字母 能输入小数点,第一位可以为0,小数点能输 ...

  7. Web服务器对比介绍

    1.Apache Apache是非常强大的老牌Web服务器,具有模块化结构,拥有众多非常成熟稳定的模块,目前仍是使用非常广泛的服务器,但它是基于多进程HTTPServer,需要对每个用户请求创建一个子 ...

  8. javaScript对象与JSON.stringfly(obj)

    //接收json对象 var objJson = new Object(); var arr = new Array(); var obj1 = new Object(); obj1.age = 15 ...

  9. Spring Boot CRUD+分页(基于Mybatis注解方式)

    步骤一:关于Mybatis Mybatis 是用来进行数据库操作的框架.其中分页使用Mybatis中的PageHelper插件. Mybatis与hibernate对比: 1.hibernate是一个 ...

  10. 手把手教你整合 SpringMvc+Spring+MyBatis+Maven

    注:该教程是参考孙宇老师的<SpringMvc+Spring+Mybatis+Maven整合视频教程1>整理的,花了我六个多小时,边复习视频边调代码边写教程,保证该教程每一步都能正确执行, ...