hdu3622Bomb Game

链接:http://acm.hdu.edu.cn/showproblem.php?pid=3622

题意:给定n对点,每对点需要选择其中之一放一个炸弹,炸弹的半径随意,但是两个炸弹的爆炸覆盖面积不允许重叠。求使得所有炸弹半径中最小值最大的那个最大值。

分析:最小值最大很经典就是二分答案,然后怎么判断呢?我们根据两两之间的互斥关系建立一些表达式然后就是一个2-sat问题啦。

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
typedef double db;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
const db eps=1e-4;
const int N=4e2+10;
const int M=1e5+10;
const ll MOD=100007;
const int mod=1000000007;
const int MAX=1000000010;
const double pi=acos(-1.0);
struct twosat {
    int n,k,d[N];
    bool mark[N];
    int tot,u[N],v[M],pre[M];
    void init(int a) {
        n=a<<1;tot=0;
        for (int i=0;ieps)
        if (pd(mid)) l=mid,mid=(l+r)/2.0;
        else r=mid,mid=(l+r)/2.0;
        printf("%.2f\n", l);
    }
    return 0;
}


你可能感兴趣的:(online,judge,Hdu,图论,2-SAT)