hdu4115
题解:
2-sat
对于bob出的每一张牌,alice显然只有两种选择
然后对于每一个限制,连边
判断是否可行
代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int flag[N],ans,T,cas,m,x,y,kkk,k,l,n;
int ne[N],fi[N],a[N],b[N],zz[N],num,t,zhan[N],dfn[N],low[N],an[N];
void init()
{
printf("Case #%d: ",++cas);
kkk=;num=l=;
memset(fi,,sizeof fi);
memset(an,,sizeof an);
memset(dfn,,sizeof dfn);
}
void jb(int x,int y)
{
ne[++num]=fi[x];
fi[x]=num;
zz[num]=y;
}
void dfs(int x)
{
low[x]=dfn[x]=++l;
zhan[++t]=x;
flag[x]=true;
for (int i=fi[x];i!=;i=ne[i])
{
if (an[zz[i]])continue;
if(!dfn[zz[i]])dfs(zz[i]);
if(!flag[zz[i]])low[x]=min(low[x],dfn[zz[i]]);else
low[x]=min(low[x],low[zz[i]]);
}
if (dfn[x]==low[x])
{
ans++;
while (zhan[t]!=x)
{
flag[zhan[t]]=false;
an[zhan[t--]]=ans;
}
an[zhan[t--]]=ans;
flag[x]=false;
}
}
int main()
{
scanf("%d",&T);
while (T--)
{
init();
scanf("%d%d",&n,&m);
for (int i=;i<n;i++)
{
scanf("%d",&x);x--;
a[i]=x;a[i+n]=(x+)%;
}
while (m--)
{
scanf("%d%d%d",&x,&y,&k);
x--;y--;
if (k==)
{
if (a[x]!=a[y+n])jb(x,y),jb(y+n,x+n);
if (a[x]!=a[y])jb(x,y+n),jb(y,x+n);
if (a[x+n]!=a[y+n])jb(x+n,y),jb(y+n,x);
if (a[x+n]!=a[y])jb(x+n,y+n),jb(y,x);
}
else
{
if (a[x]==a[y+n])jb(x,y),jb(y+n,x+n);
if (a[x]==a[y])jb(x,y+n),jb(y,x+n);
if (a[x+n]==a[y+n])jb(x+n,y),jb(y+n,x);
if (a[x+n]==a[y])jb(x+n,y+n),jb(y,x);
}
}
for (int i=;i<*n;i++)
if (!dfn[i])dfs(i);
for (int i=;i<n;i++)
if (an[i]==an[i+n])
{
puts("no");
kkk=;
break;
}
if (kkk)puts("yes");
}
}
hdu4115的更多相关文章
- 2-sat(石头、剪刀、布)hdu4115
Eliminate the Conflict Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- HDU-4115 Eliminate the Conflict 2sat
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4115 题意:Alice和Bob玩猜拳游戏,Alice知道Bob每次会出什么,为了游戏公平,Bob对Al ...
- hdu4115 Eliminate the Conflict
Eliminate the Conflict Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu4115:Eliminate the Conflict
n<=10000局剪刀石头布,对面第i局出Ai,m<=10000种对你出什么提出的要求:Xi Yi Wi 表示第Xi局和第Yi局,Wi=1:必须不同:Wi=0:必须相同,问是否存在你一局都 ...
- hdu4115 2sat
题意: 两个人玩剪刀石头布,他们玩了n把,给了你A这n把都出了什么,问你B能否会赢,其中A会限制B某些局数出的要相同,某些局数出的要不同,只要B满足他的限制,并且没没有输掉任何一把就算赢( ...
- 2-sat-总结+例题
https://www.cnblogs.com/31415926535x/p/10644419.html 从寒假就开始准备学2sat,,然后当时了解了一下模板就溜了,,,一直到上个星期,,三月底才好好 ...
随机推荐
- spark examples 导入idea并测试
记录下自己使用idea导入spark examples项目的过程. spark examples 项目可以给我们提供很多有益的参考,经常看看这些代码有助于提高我们写scala代码的水平. 只导入spa ...
- Python的幂运算
直接用例子说明
- $python用装饰器实现一个计时器
直接上代码: import time from functools import wraps # 定义装饰器 def fn_timer(function): @wraps(function) def ...
- mybatis-3 Dynamic SQL
Dynamic SQL One of the most powerful features of MyBatis has always been its Dynamic SQL capabilitie ...
- netty8---自定义编码解码器
package com.cn.codc; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.channel.Cha ...
- [转]MySQL查看数据库相关信息
原文链接:MySQL查看数据库相关信息 使用MySQL时,需要了解当前数据库的情况,例如当前的数据库大小.字符集.用户等等.下面总结了一些查看数据库相关信息的命令 1:查看显示所有数据库 mysql& ...
- ubuntu下通过mono+jexus布署mvc5网站
本文使用的ubuntu为14.04 LTS 一.安装mono,本文使用源码安装的方式 1.搭架mono编译环境 sudo apt-get update sudo apt-get install bui ...
- 20145310《Java程序设计》第3周学习总结
20145310 <Java程序设计>第3周学习总结 教材学习内容总结 本周学习内容比较多,主要是第四第五章的学习. 第四章 类与对象 类是对象的设计图,对象是类的实例. 类(Class) ...
- Tomcat热部署,Web工程中线程没有终止
近期项目中,用 jenkins 热部署 web工程时,发现工程中静态持有的线程(将ScheduledExecutorService定时任务存储在静态Map中),导致不定时出现数据库访问事务关闭异常,如 ...
- python-集合、字典
文件操作: open() read() readline() readlines() write() writelines() flush() #刷新缓冲区 seek() 修改文件读写指针 t ...