hdu 1824-Let's go home 2-SAT (模板)
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1824
Let's go home
Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2588 Accepted Submission(s): 1125Problem Description
小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。
—— 余光中集训是辛苦的,道路是坎坷的,休息还是必须的。经过一段时间的训练,lcy决定让大家回家放松一下,但是训练还是得照常进行,lcy想出了如下回家规定,每一个队(三人一队)或者队长留下或者其余两名队员同时留下;每一对队员,如果队员A留下,则队员B必须回家休息下,或者B留下,A回家。由于今年集训队人数突破往年同期最高记录,管理难度相当大,lcy也不知道自己的决定是否可行,所以这个难题就交给你了,呵呵,好处嘛~,免费**漂流一日。
Input
第一行有两个整数,T和M,1<=T<=1000表示队伍数,1<=M<=5000表示对数。
接下来有T行,每行三个整数,表示一个队的队员编号,第一个队员就是该队队长。
然后有M行,每行两个整数,表示一对队员的编号。
每个队员只属于一个队。队员编号从0开始。Output
可行输出yes,否则输出no,以EOF为结束。
Sample Input
1 2 0 1 2 0 1 1 2 2 4 0 1 2 3 4 5 0 3 0 4 1 3 1 4
Sample Output
yes no
Author
威士忌
Source
HDOJ 2007 Summer Exercise(3)- Hold by Wiskey
Recommend
威士忌 | We have carefully selected several similar problems for you: 1823 1826 1827 1822 1825
Statistic | Submit | Discuss | Note
题意:
集训是辛苦的,道路是坎坷的,休息还是必须的。经过一段时间的训练,lcy决定让大家回家放松一下,但是训练还是得照常进行,lcy想出了如下回家规定,每一个队(三人一队)或者队长留下或者其余两名队员同时留下;每一对队员,如果队员A留下,则队员B必须回家休息下,或者B留下,A回家。由于今年集训队人数突破往年同期最高记录,管理难度相当大,lcy也不知道自己的决定是否可行,所以这个难题就交给你了,呵呵,好处嘛~,免费**漂流一日。
分析:
其实就是简单的2-SAT问题判断,每个人有两种选择:留=0或走=1.
然后该2-SAT要满足两类条件,第一类是 队长留 or 另外两个队员留.
第二类是由M指出的 一对队员a和b的冲突条件.
假设a b c 组成一个队,且a是队长,那么由于队长a与队员(b,c)组合二者只能选其一,
TS.add_and_clause(b,0,c,0);//b留c留
TS.add_and_clause(c,0,b,0);//c留b留TS.add_and_clause(a,1,b,0);//a走b留TS.add_and_clause(a,1,c,0);//a走c留TS.add_and_clause(b,1,a,0);//b走a留TS.add_and_clause(c,1,a,0);//c走a留
对于另外M个条件的a与b来说有:
TS.add_and_clause(a,0,b,1);//a留,导致b走
TS.add_and_clause(b,0,a,1);//b留,导致a走
//注意用的是AND
这样错了好几次
This is the code:
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<iomanip>
#include<list>
#include<map>
#include<queue>
#include<sstream>
#include<stack>
#include<string>
#include<set>
#include<vector>
using namespace std;
#define PI acos(-1.0)
#define pppp cout<<endl;
#define EPS 1e-8
#define LL long long
#define ULL unsigned long long //1844674407370955161
#define INT_INF 0x3f3f3f3f //1061109567
#define LL_INF 0x3f3f3f3f3f3f3f3f //4557430888798830399
// ios::sync_with_stdio(false);
// 那么cin, 就不能跟C的 scanf,sscanf, getchar, fgets之类的一起使用了。
const int dr[]= {0, 0, -1, 1, -1, -1, 1, 1};
const int dc[]= {-1, 1, 0, 0, -1, 1, -1, 1};
int read()//输入外挂
{int ret=0, flag=0;char ch;if((ch=getchar())=='-')flag=1;else if(ch>='0'&&ch<='9')ret = ch - '0';while((ch=getchar())>='0'&&ch<='9')ret=ret*10+(ch-'0');return flag ? -ret : ret;
}const int maxn= 100000+10;
struct TwoSAT
{int n;//原始图的节点数(未翻倍)vector<int> G[maxn*2];//G[i]==j表示如果mark[i]=true,那么mark[j]也要=truebool mark[maxn*2];//标记int S[maxn*2],c;//S和c用来记录一次dfs遍历的所有节点编号void init(int n){this->n=n;for(int i=0; i<2*n; i++)G[i].clear();memset(mark,0,sizeof(mark));}//加入(x,xval)或(y,yval)条件//xval=0表示假,yval=1表示真void add_or_clause(int x,int xval,int y,int yval)//表示或的意思{x=x*2+xval;y=y*2+yval;G[x^1].push_back(y);G[y^1].push_back(x);}//加入(x,xval)且(y,yval)条件//xval=0表示假,yval=1表示真void add_and_clause(int x,int xval,int y,int yval)//表示或的意思{x=x*2+xval;y=y*2+yval;G[x].push_back(y);}//从x执行dfs遍历,途径的所有点都标记//如果不能标记,那么返回falsebool dfs(int x){if(mark[x^1])return false;//这两句的位置不能调换if(mark[x])return true;mark[x]=true;S[c++]=x;for(int i=0; i<G[x].size(); i++)if(!dfs(G[x][i]))return false;return true;}//判断当前2-SAT问题是否有解bool solve(){for(int i=0; i<2*n; i+=2)if(!mark[i] && !mark[i+1]){c=0;if(!dfs(i)){while(c>0)mark[S[--c]]=false;if(!dfs(i+1))return false;}}return true;}
} TS;int main()
{//freopen("D:\\chnegxubianji\\inORout\\in.txt", "r", stdin);//freopen("D:\\chnegxubianji\\inORout\\out.txt", "w", stdout);int n,m;while(~scanf("%d%d",&n,&m)){TS.init(n*3);while(n--){int a,b,c;scanf("%d%d%d",&a,&b,&c);TS.add_and_clause(b,0,c,0);//b留c留TS.add_and_clause(c,0,b,0);//c留b留TS.add_and_clause(a,1,b,0);//a走b留//TS.add_and_clause(b,0,a,1);//b留a走TS.add_and_clause(a,1,c,0);//a走c留//TS.add_and_clause(c,0,a,1);//c留a走TS.add_and_clause(b,1,a,0);//b走a留//TS.add_and_clause(a,0,b,1);//a留b走TS.add_and_clause(c,1,a,0);//c走a留//TS.add_and_clause(a,0,c,1);//a留c走//TS.add_and_clause(b,1,c,1);//b走c走//TS.add_and_clause(c,1,b,1);//c走b走}while(m--){int a,b;scanf("%d%d",&a,&b);TS.add_and_clause(a,0,b,1);//a留,导致b走TS.add_and_clause(b,0,a,1);//b留,导致a走}bool flag=TS.solve();if(flag)puts("yes");elseputs("no");}return 0;
}
hdu 1824-Let's go home 2-SAT (模板)相关推荐
- (2 sat) hdu 1824
Let's go home Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 1824 Let's go home(2-sat 基础题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1824 小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头. ...
- HDU 1824 Let's go home
2-SAT,根据题意建好图,求一下强联通分量,判断一下就可以了 #include<cstdio> #include<cstring> #include<cmath> ...
- 图论--2-SAT--HDOJ/HDU 1824 Let's go home
Problem Description 小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头. -- 余光中 集训是辛苦的,道路是坎坷的,休息还是必须的. ...
- [2-sat专练]poj 3683,hdu 1814,hdu 1824,hdu 3622,hdu 4115,hdu 4421
文章目录 Priest John's Busiest Day code Peaceful Commission code Let's go home code Bomb Game code Elimi ...
- HDU 1824 Let's go home
B - Let's go home Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB ...
- HDU - 1824 Let's go home
Let's go home Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 3555 Bomb (数位DP-记忆化搜索模板)
题意 求区间[1,n]内含有相邻49的数. 思路 比较简单的按位DP思路.这是第一次学习记忆化搜索式的数位DP,确实比递推形式的更好理解呐,而且也更通用~可以一般化: [数位DP模板总结] int d ...
- hdu 2255 奔小康赚大钱--KM算法模板
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...
- hdu 2602 Bone Collector(01背包)模板
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/Ot ...
最新文章
- DPM2007轻松恢复Exchange邮件,DPM2007系列之三
- python 柱形图 负值_Highcharts 使用负值的反向柱形图
- (软件工程复习核心重点)第十二章软件项目管理-第二节:进度计划
- oracle的in集合,oracle中in与not in集合中有空值问题
- 浏览器解析jsx_简单理解JavaScript,TypeScript和JSX
- transform:rotate在手机上显示有锯齿的解决方案
- [渝粤教育] 西南科技大学 管理会计JG211012 在线考试复习资料2021版
- java 事件处理机制
- 浏览器Quirksmode(怪异模式)与CSScompat
- 将 DataDirect ODBC 驱动程序与 Python 和 pyodbc 一起使用
- gg修改器偏移量修改_GG修改器偏移是怎么弄 | 手游网游页游攻略大全
- 视觉SLAM和激光SLAM的实现
- 移动互联网—电子商务的下一个”战场
- jQJQJQJQJQJQ
- bat递归查找指定文件_教你在电脑上用批处理脚本全盘查找文件
- JavaScript 入门哪本书最好?(问、答) 《转载》
- CentOS7.2 Django + uwsgi + Nginx 部(cǎi )署(kēng)指(zhī)南(lǜ)
- Your ApplicationContext is unlikely tostart due to a @ComponentScan of the defau
- ROS下dobot(magician)机械臂的python demo
- PyQt5中的QMessageBox消息弹窗使用示例
热门文章
- 前端接收java验证码_在Web项目中手机短信验证码实现的全过程记录
- 多元线性回归matlab代码例题_matlab多元线性回归
- C++多线程详细讲解
- 淘宝开放平台API族
- 豆瓣电台WP7客户端 开发记录1
- 天龙八部TLBB搭建(一)服务器购买及配置
- mybatis-plus QueryWrapper 添加limit
- 手机显示系统检测您正在通过代理服务器,当手机无线网出现“检测到您正在使用多个终端共享上网,网络访问被冻结15...
- 有几种检测方法可以检测沼气成分?
- 联想服务器TS130主板芯片组,【ThinkServer TS130参数】ThinkServer TS130系列服务器参数-ZOL中关村在线...