POJ 2-sat六题最后一题
http://blog.sina.com.cn/s/blog_64675f540100k2xf.html
poj 六道2-sat最后一题第六题:
题目描述:有n个农场,每个农场有坐标x,y。
有两个集合点s1和s2(也有坐标),每个农场必须连接其中的一个(有且仅有一个)。
然后有A个条件,每个条件a,b表示a农场不能和b农场连接在一个集合点。
然后再有B个条件,每个条件a,b表示a农场必须和b农场连接在一个集合点。
问你,在各种合法的连接情况中,任何两个农场间的距离的最大值的最小值是多少。
解题报告:
每个农场i分成两个点,i和i + n,前面表示连接左侧集合点,后面的表示连接右侧集合点。
对于条件A中的ab,连接
<a, b + n> <a + n, b> <b, a + n> <b + n, a>
这样就保证了ab不再一个集合点。同理,B条件也很好写。
然后就是用二分枚举答案(距离的最大值)。
对于每一次枚举的答案key,枚举任意两个农场a,b, 如果他俩的4种距离(a->s1->s1>b, a->s2->s2->b, a->s1->s2->b, a->s2->s1->b)有大于key的,就加入判定条件,不能这样连接。
// File Name: 2749.cpp// Author: zlbing// Created Time: 2013/2/5 21:18:58#include #include #include #include #include #include #include