【bzoj3035】【codevs2490】导弹防御塔 二分+匈牙利 || 二分+dinic

该博客详细介绍了如何解决一个名为‘导弹防御塔’的问题,涉及二分搜索和匈牙利算法。在给定防御塔和入侵者坐标,以及导弹参数的情况下,计算击退所有入侵者的最小时间。博客提到了数据范围和处理常数优化的挑战,并分享了解决过程中遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

题目描述 Description

  Freda的城堡——
  “Freda,城堡外发现了一些入侵者!”
  “喵…刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~”
  “可是入侵者已经接近城堡了呀!”
  “别担心,rainbow,你看呢,这是我刚设计的导弹防御系统的说~”
  “喂…别卖萌啊……”

  Freda控制着N座可以发射导弹的防御塔。每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚。在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚导弹的防御塔需要T2分钟来冷却。
  所有导弹都有相同的匀速飞行速度V,并且会沿着距离最短的路径去打击目标。计算防御塔到目标的距离Distance时,你只需要计算水平距离,而忽略导弹飞行的高度。导弹在空中飞行的时间就是 (Distance/V) 分钟,导弹到达目标后可以立即将它击毁。
  现在,给出N座导弹防御塔的坐标,M个入侵者的坐标,T1、T2和V,你需要求出至少要多少分钟才能击退所有的入侵者。

输入描述 Input Description

  第一行五个正整数N,M,T1,T2,V。
  接下来M行每行两个整数,代表入侵者的坐标。
  接下来N行每行两个整数,代表防御塔的坐标。

输出描述 Output Description

  输出一个实数,表示最少需要多少分钟才能击中所有的入侵者,四舍五入保留六位小数。

样例输入 Sample Input

3 3 30 20 1
0 0
0 50
50 0
50 50
0 1000
1000 0

样例输出 Sample Output

91.500000

数据范围及提示 Data Size & Hint

  对于40%的数据,N,M<=20.
  对于100%的数据, 1≤N≤50, 1≤M≤50,坐标绝对值不超过10000,T1,T2,V不超过2000.

来源:Nescafe 19


Orzlyd

CH挂了,tyvj评测机评的和我手测不一样,幸亏codevs有…bzoj的还是T所以我敲个dinic去看看…

不好求极值,转为二分。

二分答案T,看看T个时间内能发多少个导弹,能发多少个就拆成多少个点,然后若某个导弹a时刻发出去,需要b时刻才能打中目标,那么这个点和目标连一条边,然后跑个匈牙利看看是不是完全匹配即可

还有就是论认真读题的重要性…题目中t1的单位是秒,t2和答案的单位是分钟…坑爹啊我半天没看见

……卡常数……卡二分上界……我不想说什么了……

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;

const double INF = 30000;
const int SZ = 1000010;

int n,m;
double t1,t2;

double t[233][233];

int head[SZ],nxt[SZ],tot = 0,to[SZ];

void build(int f,int t)
{
    to[++ tot] = t;
    nxt[tot] = head[f];
    head[f] = tot;
}


bool vis[SZ];
int match[SZ];
bool dfs(int u)
{
    for(int i = head[u];i;i = nxt[i])
    {
        int v = to[i];
        if(!vis[v])
        {
            vis[v] = 1;
            if(!match[v] || dfs(match[v]))
            {
                match[v] = u;
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值