主题

主题

 
   

Let's go home

原题:http://acm.hdu.edu.cn/showproblem.php?pid=1824

Problem 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


题目大意:

(Discuss里说题目叙述不是很清晰,反复读了一下还是有点纠缠)

每一组,要么留下队长,要么留下两名队员。

每一对,至多留下一个。可以两个均不留下。


个人解法:

据说有一篇文章式专门讲这个玩意的。叫做《由对称性解决2-sat问题》。然后看了一下。

但是还是不是按照这篇文章建图的。

我是按照每个人留下或者不留下来建点(似乎有人是按照组来建点?)

对于第一个限制,讨论队长/非队长,向队里面的另外两个人连边即可

第二个限制较普遍。不必赘述。


代码如下:

https://code.csdn.net/snippets/2302591

 
 
评论