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 ...
随机推荐
- 两句话,实现android 4.4以上实现沉浸式状态栏
效果图如下,就是状态栏和actionbar保持一致的颜色,非常漂亮 1:在Activity的OnCreate函数 if (Build.VERSION.SDK_INT >= Build.VERSI ...
- JVM调优总结(转)
本文转自:http://my.oschina.net/xishuixixia/blog/132395 常用的调优参数. 1.堆大小 -Xms和-Xmx用于指定堆大小,我们需要将他们俩设置为一样的值,以 ...
- C#基础--多线程
一.微软早期操作系统中的问题 在早期的操作系统中,应用程序都是在同一个地址空间中运行的,每个程序的数据其它程序都是可见的,并且因为早期CPU是单内核 的所以所有的执行都是线性的.这就引出两个问题: 第 ...
- (转)国内yum源的安装(163,阿里云,epel)
国内yum源的安装(163,阿里云,epel) ----阿里云镜像源 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS ...
- 2_jenkins_git创建创建及项目构建
确保jenkins服务正常工作 进入WEB界面 查看git插件是否正常安装 "管理系统" --> "管理插件" "可选插件" 然后找到 ...
- How to Enable RPMForge Repository in RHEL/CentOS 7.x/6.x/5.x
RPMforge repository is a utility that is used to install third party software packages under Red Hat ...
- JSON 中JsonConfig的使用(转)
我们通常对一个Json串和Java对象进行互转时,经常会有选择性的过滤掉一些属性值,而json-lib包中的JsonConfig为我们提供了这种 功能,具体实现方法有以下几种.(1)建立JsonCon ...
- Vue.js项目部署在Tomcat服务器上
1.在本地的Vue框架中 执行npm run build 将我们的项目打包到dist 文件夹中 2.在服务器上的Tomcat的 webapps文件夹下,新建一个文件夹如:frontvue 3.启动t ...
- 编程之美——求1~N的整数中1的个数
为了依次求个位,十位,百位中1的个数,我们可以把这个数字分为三部分,高位数字,当前位数字,低位数字. 如果当前位为0,那么此位为1的数目与高位数字有关 如果当前位为1,那么此位为1的数目与高位和地位都 ...
- webservice获取天气信息
效果 1.eclipse中新建一个Java项目 2.通过命名获取天气的客户端信息 首先,打开天气网站http://ws.webxml.com.cn/WebServices/WeatherWS.asmx ...