[tyvj1935 Poetize3]导弹防御塔 (二分图多重匹配)
Description
Freda控制着N座可以发射导弹的防御塔。每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚。在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚导弹的防御塔需要T2分钟来冷却。
所有导弹都有相同的匀速飞行速度V,并且会沿着距离最短的路径去打击目标。计算防御塔到目标的距离Distance时,你只需要计算水平距离,而忽略导弹飞行的高度。导弹在空中飞行的时间就是 (Distance/V) 分钟,导弹到达目标后可以立即将它击毁。
现在,给出N座导弹防御塔的坐标,M个入侵者的坐标,T1、T2和V,你需要求出至少要多少分钟才能击退所有的入侵者。
Input
第一行五个正整数N,M,T1,T2,V。
接下来M行每行两个整数,代表入侵者的坐标。
接下来N行每行两个整数,代表防御塔的坐标。
Output
输出一个实数,表示最少需要多少分钟才能击中所有的入侵者,四舍五入保留六位小数。
Sample Input
3 3 30 20 1
0 0
0 50
50 0
50 50
0 1000
1000 0
Sample Output
91.500000
HINT
对于40%的数据,N,M<=20.
对于100%的数据, 1≤N≤50, 1≤M≤50,坐标绝对值不超过10000,T1,T2,V不超过2000.
Solution
二分答案
把入侵者当做左部点,向能在时间内打到它的导弹连边,跑最大匹配
这是多重匹配的一种做法即:拆点
//By Menteur_Hxy
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
using namespace std;
int read() {
int x=0,f=1; char c=getchar();
while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}
while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();
return x*f;
}
const int N=60;
int n,m,tot;
int vis[N*N],fr[N*N];
double t1,t2,v;
double tim[N][N];
vector <int> V[N];
struct Poi{int x,y;}I[N],D[N];
bool dfs(int x) {
int siz=V[x].size();
F(i,0,siz-1) { int v=V[x][i];
if(!vis[v]) {
vis[v]=1;
if(!fr[v]||dfs(fr[v])) {
// cout<<x<<" "<<v<<endl;
fr[v]=x;
return 1;
}
}
}
return 0;
}
bool jud(double x) {
tot=0;
F(i,1,m) V[i].clear();
F(i,1,m) F(j,1,n) {
double now=0;
F(k,0,m) {
now=k*(t1+t2);
if(x-(now+t1+tim[i][j])>1e-7) {
// cout<<i<<" "<<j<<" "<<k<<endl;
V[i].push_back(j*(m+1)+k-m-1);
}
else break;
// cout<<j*(m+1)+k-m-1<<endl;
}
}
memset(fr,0,sizeof(fr));
F(i,1,m) {
memset(vis,0,sizeof(vis));
if(!dfs(i)) return 0;
}
return 1;
}
int main() {
n=read(),m=read(),t1=read()/60.0,t2=read(),v=read();
F(i,1,m) I[i].x=read(),I[i].y=read();
F(i,1,n) D[i].x=read(),D[i].y=read();
F(i,1,m) F(j,1,n) tim[i][j]=sqrt((I[i].x-D[j].x)*(I[i].x-D[j].x)+(I[i].y-D[j].y)*(I[i].y-D[j].y))/v;
// F(i,1,m) F(j,1,n) printf("tim[%d][%d]=%lf\n",i,j,tim[i][j]);
double l=0,r=1000000,ans=r;
while(r-l>1e-9) {
double mid=(l+r)/2.0;
// cout<<mid<<endl;
if(jud(mid)) ans=min(ans,mid),r=mid;
else l=mid;
}
printf("%.6lf",ans);
return 0;
}
[tyvj1935 Poetize3]导弹防御塔 (二分图多重匹配)的更多相关文章
- 「Poetize3」导弹防御塔
描述 Description Freda控制着N座可以发射导弹的防御塔.每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚.在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚导 ...
- CH6803 导弹防御塔
6803 导弹防御塔 0x60「图论」例题 背景 Freda的城堡-- "Freda,城堡外发现了一些入侵者!" "喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛l ...
- hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)
#1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...
- 【POJ 1698】Alice's Chance(二分图多重匹配)
http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...
- 稳定的奶牛分配 && 二分图多重匹配+二分答案
题意: 农夫约翰有N(1<=N<=1000)只奶牛,每只奶牛住在B(1<=B<=20)个奶牛棚中的一个.当然,奶牛棚的容量有限.有些奶牛对它现在住的奶牛棚很满意,有些就不太满意 ...
- hiho 第117周 二分图多重匹配,网络流解决
描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小Ho作为班上的班干部,统计分配比赛选手的重任也自然交到了他们手上. 已知小Hi和小Ho所在的班级一共有N名学生(包含 ...
- bzoj3035: 导弹防御塔
Description Freda的城堡——“Freda,城堡外发现了一些入侵者!”“喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~”“可是入侵者已经接近城堡了呀!”“别担心,rain ...
- 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)
[题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...
- POJ2584 T-Shirt Gumbo【二分图多重匹配】
题目链接: id=2584">http://poj.org/problem?id=2584 题目大意: 如今有5种型号(S.M.L.X.T)的衣服要发放给N个參赛队员.给出每一个參赛者 ...
随机推荐
- javascript打开本地应用
function openShell(){ if(window.ActiveXObject){ var cmd = new ActiveXObject('WScript.Shell') cmd.Run ...
- 腾讯面试题:A.txt和B.txt两个文件,A有1亿个qq号,B有100万个,用代码实现交、并、差
在STL中关于有序序列有这么四个算法: set_union(beg, end, beg, end2, dest); //求并集A∪B set_union(beg, ...
- uboot向内核模块传递参数的方法
1 模块参数 定义模块参数 1 module_param(name, type, perm); 定义一个模块参数, name 变量名 type 数据类型 bool:布尔型 invbool:一个布尔型( ...
- Android shape自定义形状,设置渐变色
<?xml version="1.0" encoding="utf-8"?> <!-- android:shape=["rect ...
- ssdb底层实现——ssdb底层是leveldb,leveldb根本上是skiplist(例如为存储多个list items,必然有多个item key,而非暴力string cat),用它来做redis的list和set等,势必在数据结构和算法层面上有诸多不适
我已经在用ssdb的hash结构,存储了很多数据了,但是我现在的用法正确吗? 我使用hash结构合理吗? 1. ssdb数据库说是类似redis,而且他们都有hash结构,但是他们的命名有点不同,ss ...
- 洛谷P2756 飞行员配对方案问题(二分图匹配)
P2756 飞行员配对方案问题 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其 ...
- Blender插件编写指南
前言 Blender插件是Blender的利器, 用户可以使用各种插件扩充Blender的功能. Blender Python插件以bpy.props, bpy.types.Operator, bpy ...
- 前端-git思维导图笔记
命令汇总 git config配置本地仓库 常用git config --global user.name.git config --global user.email git config --li ...
- Linux系统下通过命令行对mysql数据进行备份和还原
一.备份 1.进入mysql目录 cd /var/lib/mysql (进入mysql目录,根据安装情况会有差别) 2.备份 mysqldump -u root -p密码 数据库名 数据表名 > ...
- ★Java语法(二)——————————数据类型常见问题
1.用float型定义变量:float a = 3.14 :是否正确? 不正确.“=” 两边的精度类型不匹配,应为:float a =(float)3.14 或 float a =3.14F 或 ...