题意:

  石头剪刀布 分别为1、2、3,有n轮,给出了小A这n轮出什么,然后m行,每行三个数a b k,如果k为0 表示小B必须在第a轮和第b轮的策略一样,如果k为1 表示小B在第a轮和第b轮的策略不一样,如果又一轮小B输了,那整个就输了,求小B能否战胜小A

解析:

  写出来矛盾的情况  建图就好啦

可能我建的麻烦了。。。不过。。我喜欢 hhhhh

#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <cctype>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <bitset>
#define rap(i, a, n) for(int i=a; i<=n; i++)
#define rep(i, a, n) for(int i=a; i<n; i++)
#define lap(i, a, n) for(int i=n; i>=a; i--)
#define lep(i, a, n) for(int i=n; i>a; i--)
#define rd(a) scanf("%d", &a)
#define rlld(a) scanf("%lld", &a)
#define rc(a) scanf("%c", &a)
#define rs(a) scanf("%s", a)
#define pd(a) printf("%d\n", a);
#define plld(a) printf("%lld\n", a);
#define pc(a) printf("%c\n", a);
#define ps(a) printf("%s\n", a);
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _ ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = 1e5 + , INF = 0x7fffffff, LL_INF = 0x7fffffffffffffff;
int n, m;
int a[maxn];
vector<int> G[maxn];
int sccno[maxn], vis[maxn], low[maxn], scc_clock, scc_cnt;
stack<int> S;
void init()
{
mem(sccno, );
mem(vis, );
mem(low, );
scc_clock = scc_cnt = ;
for(int i = ; i < maxn; i++) G[i].clear();
} void dfs(int u)
{
low[u] = vis[u] = ++scc_clock;
S.push(u);
for(int i = ; i < G[u].size(); i++)
{
int v = G[u][i];
if(!vis[v])
{
dfs(v);
low[u] = min(low[u], low[v]);
}
else if(!sccno[v])
{
low[u] = min(low[u], vis[v]);
}
}
if(low[u] == vis[u])
{
scc_cnt++;
for(;;)
{
int x = S.top(); S.pop();
sccno[x] = scc_cnt;
if(x == u) break;
}
}
} bool check()
{
for(int i = ; i < n * ; i += )
if(sccno[i] == sccno[i + ])
{
return false;
}
return true;
} int main()
{
int T, kase = ;
cin >> T;
while(T--)
{
init();
int u, v, w;
cin >> n >> m;
for(int i = ; i < n; i++)
cin >> a[i];
for(int i = ; i <= m; i++)
{
cin >> u >> v >> w;
u--, v--;
int x = a[u], y = a[v];
if(w == )
{
if(x == y)
{
G[u << ].push_back(v << | );
G[v << | ].push_back(u << );
G[u << | ].push_back(v << );
G[v << ].push_back(u << | );
}
else if(x != y)
{
if(x == && y == || y == && x == )
{
if(y == && x == )
swap(u, v);
G[u << | ].push_back(v << | ), G[v << ].push_back(u << );
}
else if(x == && y == || y == && x == )
{
if(y == && x == )
swap(u, v);
G[v << | ].push_back(u << | ), G[u << ].push_back(v << );
}
else if(x == && y == || x == && y == )
{
if(x == && y == )
swap(u, v);
G[u << | ].push_back(v << | ), G[v << ].push_back(u << );
}
}
}
else
{
if(x == y)
{
G[u << ].push_back(v << ), G[u << | ].push_back(v << | );
G[v << ].push_back(u << ), G[v << | ].push_back(u << | );
}
else
{
if(x == && y == || x == && y == )
{
if(x == && y == ) swap(u, v);
G[u << | ].push_back(v << ), G[v << ].push_back(u << | );
G[u << ].push_back(u << | ), G[v << | ].push_back(v << );
}
else if(x == && y == || x == && y == )
{
if(x == && y == ) swap(u, v);
G[u << ].push_back(v << | ), G[v << | ].push_back(u << );
G[u << | ].push_back(u << ), G[v << ].push_back(v << | );
}
else if(x == && y == || y == && x == )
{
if(y == && x == ) swap(u, v);
G[u << | ].push_back(v << ), G[v << ].push_back(u << | );
G[u << ].push_back(u << | ), G[v << | ].push_back(v << );
}
}
}
}
for(int i = ; i < n * ; i++)
if(!vis[i]) dfs(i);
printf("Case #%d: ", ++kase);
if(check())
{
cout << "yes" << endl;
}
else cout << "no" << endl;
} return ;
}

Eliminate the Conflict HDU - 4115(2-sat 建图 hhh)的更多相关文章

  1. Meeting HDU - 5521 虚点建图

    Problem Description Bessie and her friend Elsie decide to have a meeting. However, after Farmer John ...

  2. HDU 4292 Food (建图思维 + 最大流)

    (点击此处查看原题) 题目分析 题意:某个餐馆出售f种食物,d种饮料,其中,第i种食物有fi份,第i种饮料有di份:此时有n个人来餐馆吃饭,这n个人必须有一份食物和一份饮料才会留下来吃饭,否则,他将离 ...

  3. 逃生 HDU 4857(反向建图 + 拓扑排序)

    逃生 链接 Problem Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必 ...

  4. hdu 4115 (2—SAT)

    题意:两个人石头剪刀布,一个人的出法已确定,另一个人的出法有一定约束,某两次要相同或者不同,问你第二个人能否全部都不失败. 思路:根据Bob出的情况,我们可以确定每次Alice有两种方案. R与P,S ...

  5. hdu 4568 Hunter bfs建图+TSP状压DP

    想AC的人请跳过这一段... 题目应该都能读懂.但是个人觉得这题出的很烂,意思太模糊了. 首先,进出次数只能是一次!!这个居然在题目中没有明确说明,让我在当时看到题目的时候无从下手. 因为我想到了这几 ...

  6. HDU 4115 Eliminate the Conflict(2-sat)

    HDU 4115 Eliminate the Conflict pid=4115">题目链接 题意:Alice和Bob这对狗男女在玩剪刀石头布.已知Bob每轮要出什么,然后Bob给Al ...

  7. hdu 4115 Eliminate the Conflict ( 2-sat )

    Eliminate the Conflict Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  8. HDU 4115 Eliminate the Conflict(2-SAT)(2011 Asia ChengDu Regional Contest)

    Problem Description Conflicts are everywhere in the world, from the young to the elderly, from famil ...

  9. 图论--2-SAT--HDU/HDOJ 4115 Eliminate the Conflict

    Problem Description Conflicts are everywhere in the world, from the young to the elderly, from famil ...

随机推荐

  1. 最值反演 min-max容斥

    说实话这些博客早晚都要整理后上m***999. 最值反演是针对一个集合中最大/最小值的反演. \[ \max\{S\}=\sum_{T\subset S}(-1)^{|T|+1}\min\{T\} \ ...

  2. Ubuntu 14.04 安装caffe

    仅支持CPU模式 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-ser ...

  3. 利用lnmp一键安装的php环境忘记mysql,root用户密码解决方法

    1.cd /lnmp1.5/tools/ 2.sh reset_mysql_root_password.sh 这样,即可完成修改!

  4. GitHub和Git超超超详细使用教程

    GitHub的简单使用第一步 创建GitHub账号1. 打开GitHub官网.2. 点击绿色按钮Sign up for GitHub,填写用户名,邮件地址和密码.注意: 用户名只能包含字母和" ...

  5. linux 下mysql服务的管理

    一.mysql服务的管理 1.1 mysql启动与关闭 linux下启动mysql: /etc/init.d/mysqld start 关闭进程: ps -ef | grep mysql 找到进程号 ...

  6. vue单页面模板说明文档(3)

    Environment Variables Sometimes it is practical to have different config values according to the env ...

  7. Sqlserver 命令行方式修改 用户密码的方法

    1. 之前写了一个 可以使用  ssms 的方式修改密码的情况 2. 还有办法是执行命令 exec sp_password null,'newpassword','sa' # sa 是用户名 newp ...

  8. laravel实现批量添加数据

    在使用laravel eloquent进行数据库操作的时候惊讶的发现这货居然不支持批量添加,看到网上很多人在循环里进行数据库插入操作来实现批量添加,我想说这样做是很损失性能滴!好在框架的DB门面里的i ...

  9. 将Vue移动端项目打包成手机app---HBuilder

    将移动端页面打包成app 1.使用 HBuilder 直接编译打包 点击左上角 文件>打开目录>选择目录  选择用Webpack打包好的dist文件目录 由于我添加到项目了,所以会显示该项 ...

  10. php 将数组转换网址URL参数

    $array =array ( 'id' =123, 'name' = 'dopost' );echo http_build_query( $array );//得到结果id=123name=dopo ...