思路比较显然:二分答案,流流流

但是实现的时候感觉自己数学捉急。。

一开始算了个直线到点距离。。。。

应该是线段到点距离

 #include <bits/stdc++.h>
#define sqr(x) ((x)*(x))
#define MAXN 50000
#define TO (n+m+2)
#define FROM (n+m+1)
#define PO (n+m+2)
#define INF 2000000000
#define mid (l+r>>1)
using namespace std;
int n,m,k,LI=,ans;
int to[MAXN],w[MAXN],nex[MAXN],fir[MAXN];
int h[MAXN],qq[MAXN],flo[MAXN],id[MAXN];
int ti[MAXN],x[MAXN],y[MAXN],X[MAXN],Y[MAXN],r[MAXN],p[MAXN],q[MAXN],R[MAXN];
void add(int p,int q,int o)
{
to[LI]=q;w[LI]=o;nex[LI]=fir[p];fir[p]=LI;LI++;
to[LI]=p;w[LI]=;nex[LI]=fir[q];fir[q]=LI;LI++;
}
bool bfs()//计算层次图
{
int head=-,tail=;
for(int i=;i<=PO;i++) h[i]=-;
qq[]=FROM;h[FROM]=;// h[i]:点i的层数
while(head!=tail)
{
int x=qq[++head];
for(int i=fir[x];i;i=nex[i])
if(flo[i]&&h[to[i]]==-)
{
h[to[i]]=h[x]+;
qq[++tail]=to[i];
}
}
return h[TO]!=-;
}
int dfs(int x,int f)//增广路:到点x最大容量为 f
{
if(x==TO)return f;
int w,used=;
for(int i=fir[x];i;i=nex[i])
if(h[to[i]]==h[x]+)
{
w=dfs(to[i],min(flo[i],f-used));
flo[i]-=w; flo[i^]+=w;
used+=w;if(used==f)return f;
}
if(!used)h[x]=-;
return used;
}
int dinic() //%usqwedf
{
int ans=;
while(bfs())
ans+=dfs(FROM,1e9);
return ans;
}
bool ok(int time)
{
for(int i=;i<=n;i++)
w[id[i]]=time/ti[i]+;
for(int i=;i<LI;i++)
flo[i]=w[i];
return(dinic()==m);
}
int main()
{
// freopen("1.in","r",stdin);
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++)
scanf("%d%d%d%d",&x[i],&y[i],&r[i],&ti[i]);
for(int i=;i<=m;i++)
scanf("%d%d",&X[i],&Y[i]);
for(int i=;i<=k;i++)
scanf("%d%d%d",&p[i],&q[i],&R[i]);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
bool flag=sqr(x[i]-X[j])+sqr(y[i]-Y[j])<=sqr(r[i]);
if(!flag) continue;
long long a=y[i]-Y[j],b=X[j]-x[i],c=x[i]*Y[j]-y[i]*X[j];
for(int o=;o<=k;o++)
if(sqr(a*p[o]+b*q[o]+c)<=sqr(R[o])*(sqr(a)+sqr(b)) && (sqr(x[i]-p[o])+sqr(y[i]-q[o])<=sqr(R[o]) || sqr(X[j]-p[o])+sqr(Y[j]-q[o])<=sqr(R[o])))
{
flag=;
break;
}
if(flag)
add(i,j+n,);
}
for(int i=;i<=m;i++)
add(i+n,TO,);
for(int i=;i<=n;i++)
id[i]=LI,add(FROM,i,);
int l,r;
for(l=,r=;l<r;)
if(ok(mid)) r=mid;else l=mid+;
if(ok(l))
printf("%d\n",l);
else
puts("-1");
return ;
}

bzoj1822: [JSOI2010]Frozen Nova 冷冻波网络流的更多相关文章

  1. Bzoj1822 [JSOI2010]Frozen Nova 冷冻波

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

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

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

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

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

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

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

  5. 1822: [JSOI2010]Frozen Nova 冷冻波 二分最大流

    1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 585  Solved: 175[Subm ...

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

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

  7. BZOJ 1822[JSOI2010]Frozen Nova 冷冻波

    网络流+二分. n^3枚举判断每个巫妖可以攻击的精灵,向其连1的边,每个精灵向汇点连1的边. 二分答案,修改源点流向每个巫妖的cap,跑最大流看是否等于精灵数. 恩,看起来没什么毛病. 然后狂WA不止 ...

  8. BZOJ1822 Frozen Nova 冷冻波

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

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

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

随机推荐

  1. RQNOJ 329 刘翔!加油!:01背包

    题目链接:https://www.rqnoj.cn/problem/329 题意: 刘翔有n封信,每封信都有自己的欣赏价值value[i].消耗时间time[i].消耗体力h[i].和得到的鼓舞w[i ...

  2. struts2 validate手动验证

    我们前面学习struts2知道,struts2通过拦截器实现了一些验证操作. 比如,如果是不能转换的类型在action中接受的话会跳转到错误页面,错误信息中会包含对应的错误信息,例如: 首先我们了解一 ...

  3. win装wamp

    前传: 刚换了工作环境,从原来的全mac转到全windows,很不适应,简单的wamp鼓捣了半天 环境: win 7 旗舰版 ,wamp ,下载地址: http://pan.baidu.com/s/1 ...

  4. linux 进程学习笔记-运行新进程

    我们知道,当用fork启动一个新进程以后,新进程会复制父进程的大部份内存空间并接着运行父进程中的代码,如果我们使新进程不运行原父进程的代码,转而运行另外一个程序集中的代码,这就相当于启动了一个新程序. ...

  5. ACM学习历程——UVA11234 Expressions(栈,队列,树的遍历,后序遍历,bfs)

    Description   Problem E: Expressions2007/2008 ACM International Collegiate Programming Contest Unive ...

  6. HDU1540(线段树统计连续长度)

    ---恢复内容开始--- Tunnel Warfare Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d &am ...

  7. 查看MySql数据库物理文件存放位置

    查找数据库文件位置使用命令 show global variables like "%datadir%";

  8. Redis多个数据库

    注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念. Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存 ...

  9. 面向对象——final关键字

    继承的弊端:打破了封装性 解决方式:final final关键字的特点: 1.final是一个修饰符,即可以修饰类,也可以修饰方法,还可以修饰变量 2.final修饰的类不可以被继承 3.final修 ...

  10. 启用数据库 aspnetstate 会话状态

    http://www.cnblogs.com/klzwj1988/archive/2010/05/10/1731723.html