显然是二分+最大流判定
但比较烦的是判断线段和圆及其内部是否有公共点
我的判断方法是错的,但是数据弱
目前只知道推公式分类讨论,如果有简单的方法求教

 const inf=;
type node=record
flow,po,next:longint;
end;
point=record
x,y:longint;
end; var e:array[..] of node;
a,b,c:array[..] of point;
can:array[..,..] of boolean;
g,cur,v,w,pre,p,numh,h:array[..] of longint;
q,l,r,t,ans,mid,i,j,n,m,k,len:longint;
ff,ch:boolean; function dis(a,b:point):double;
begin
exit(sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)));
end; function cross(a,b,c:point):double;
begin
cross:=abs((a.x-b.x)*(a.y-c.y)-(a.x-c.x)*(a.y-b.y));
cross:=cross/dis(a,b);
end; procedure add(x,y,f:longint);
begin
inc(len);
e[len].po:=y;
e[len].flow:=f;
e[len].next:=p[x];
p[x]:=len;
end; function sap:longint;
var u,i,j,tmp,q:longint;
begin
fillchar(h,sizeof(h),);
fillchar(numh,sizeof(numh),);
for i:= to t do
cur[i]:=p[i];
u:=;
sap:=;
numh[]:=t+;
while h[]<t+ do
begin
i:=cur[u];
while i<>- do
begin
j:=e[i].po;
if (e[i].flow>) and (h[u]=h[j]+) then
begin
pre[j]:=u;
cur[u]:=i;
u:=j;
if u=t then
begin
inc(sap);
if sap=m then exit;
while u<> do
begin
u:=pre[u];
j:=cur[u];
dec(e[j].flow);
inc(e[j xor ].flow);
end;
end;
break;
end;
i:=e[i].next;
end;
if i=- then
begin
dec(numh[h[u]]);
if numh[h[u]]= then exit;
tmp:=t;
q:=-;
i:=p[u];
while i<>- do
begin
j:=e[i].po;
if e[i].flow> then
if h[j]<tmp then
begin
q:=i;
tmp:=h[j];
end;
i:=e[i].next;
end;
h[u]:=tmp+;
inc(numh[h[u]]);
cur[u]:=q;
if u<> then u:=pre[u];
end;
end;
end; function check(s:longint):boolean;
var q,i,j:longint;
begin
fillchar(p,sizeof(p),);
len:=-;
q:=;
for i:= to n do
begin
add(,i,s div w[i]+);
add(i,,);
if s div w[i]*w[i]>q then q:=s div w[i]*w[i];
end;
for i:= to m do
begin
add(i+n,t,);
add(t,i+n,);
for j:= to n do
if can[i,j] then
begin
add(j,i+n,);
add(i+n,j,);
end;
end;
if sap=m then
begin
ans:=q;
exit(true);
end
else exit(false);
end; begin
readln(n,m,k);
for i:= to n do
begin
readln(a[i].x,a[i].y,v[i],w[i]);
if w[i]>r then r:=w[i];
end;
for i:= to m do
readln(b[i].x,b[i].y);
for i:= to k do
readln(c[i].x,c[i].y,g[i]);
for i:= to m do
begin
ch:=false;
for j:= to n do
if dis(b[i],a[j])<=v[j] then
begin
ff:=true;
for q:= to k do
if cross(b[i],a[j],c[q])<g[q] then
begin
ff:=false;
break;
end;
if ff then
begin
can[i,j]:=true;
ch:=true;
end;
end; if not ch then
begin
writeln(-);
halt;
end;
end;
t:=n+m+;
l:=;
r:=r*m;
while l<=r do
begin
mid:=(l+r) shr ;
if check(mid) then r:=ans- else l:=mid+;
end;
writeln(ans);
end.

bzoj1822的更多相关文章

  1. 【BZOJ1822】[JSOI2010]冷冻波(二分,网络流)

    [BZOJ1822][JSOI2010]冷冻波(二分,网络流) 题面 BZOJ 洛谷 题解 先预处理每个巫妖可以打到哪些小精灵,然后二分答案,网络流判定即可. #include<iostream ...

  2. 【BZOJ1822】[JSOI2010]Frozen Nova 冷冻波 几何+二分+网络流

    [BZOJ1822][JSOI2010]Frozen Nova 冷冻波 Description WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀 ...

  3. BZOJ-1822 Frozen Nova 冷冻波 计(jie)算(xi)几何+二分+最大流判定+经典建图

    这道逼题!感受到了数学对我的深深恶意(#‵′).... 1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MB S ...

  4. BZOJ1822 Frozen Nova 冷冻波

    1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec  Memory Limit: 64 MB Description WJJ喜欢“魔兽争霸”这个游戏. ...

  5. Bzoj1822 [JSOI2010]Frozen Nova 冷冻波

    Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1933  Solved: 608 Description WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖 ...

  6. 【计算几何】【二分答案】【最大流】bzoj1822 [JSOI2010]Frozen Nova 冷冻波

    用三角形面积什么的算算点到直线的距离之类……其实相切的情况是可行的……剩下的就跟某SDOI2015一样了. #include<cstdio> #include<cmath> # ...

  7. 【bzoj1822】[JSOI2010]Frozen Nova 冷冻波 计算几何+二分+网络流最大流

    题目描述 WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵.我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线 ...

  8. bzoj1822: [JSOI2010]Frozen Nova 冷冻波网络流

    思路比较显然:二分答案,流流流 但是实现的时候感觉自己数学捉急.. 一开始算了个直线到点距离.... 应该是线段到点距离 #include <bits/stdc++.h> #define ...

  9. BZOJ1822 [JSOI2010]Frozen Nova 冷冻波 二分+最大流

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1822 题解 好久没做网络流的,都没有想到网络流... 首先暴力判断一下一个巫妖和一个精灵之间能 ...

随机推荐

  1. 3.redis.3.2 下载,安装、配置、使用、集群主从创建 - 3

    当然,集群最主要的就是配置文件: 简单配置如下, port 7001 bind 127.0.0.1 databases 16 appendonly yes appendfilename "a ...

  2. windows8 8.1 安装完 ubuntu无法挂载 ntfs分区 解决方法

    windows8 8.1 安装完 ubuntu无法挂载 ntfs分区 解决方法: 最近安装完发现8.1系统后,ubuntu无法加载以前的ntfs分区了,特别是我添加到了/etc/fstab里面了 导致 ...

  3. Spring的多配置文件加载

    如果配置文件存在多个的情况下,加载配置文件的方式是:1--可以指定总的配置文件去包含子的配置文件,然后只加载总的配置文件即可在总配置文件applicationContext.xml 中引入子文件 &l ...

  4. UITextField文本字段控件的位置

    如果需要更改默认的UITextField清除按钮.左右视图等等控件的位置,可以通过如下设置: // 控制清除按钮的位置 (默认 width = 15 = height) -(CGRect)clearB ...

  5. 暑假集训(1)第一弹 -----士兵队列训练问题(Hdu1276)

    Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报 ...

  6. 【DP_背包专题】 背包九讲

    这段时间看了<背包九讲>,在HUST VJUDGE上找到了一个题单,挑选了其中16道题集中做了下,选题全部是HDU上的题,大多是简单题.目前做了点小总结,大概提了下每道题的思路重点部分,希 ...

  7. 《sed的流艺术之四》-linux命令五分钟系列之二十四

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  8. [转载] PowerMokito 使用

    一.为什么要使用Mock工具 在做单元测试的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,远程服务, 文件系统等等). 而我们没法控制这些外部依赖的对象,为了解 ...

  9. angularjs制作的iframe后台管理页切换页面

    <code> <!DOCTYPE html><html lang="zh" ng-app><head> <meta chars ...

  10. Avoiding “will create implicit index” NOTICE

    执行PgSql避免 notice 信息,执行之前加入以下语句调整报错级别即可: SET CLIENT_MIN_MESSAGES = ‘WARNING’;