bzoj1822: [JSOI2010]Frozen Nova 冷冻波网络流
思路比较显然:二分答案,流流流
但是实现的时候感觉自己数学捉急。。
一开始算了个直线到点距离。。。。
应该是线段到点距离
#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 冷冻波网络流的更多相关文章
- Bzoj1822 [JSOI2010]Frozen Nova 冷冻波
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1933 Solved: 608 Description WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖 ...
- BZOJ1822 [JSOI2010]Frozen Nova 冷冻波 二分+最大流
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1822 题解 好久没做网络流的,都没有想到网络流... 首先暴力判断一下一个巫妖和一个精灵之间能 ...
- 【计算几何】【二分答案】【最大流】bzoj1822 [JSOI2010]Frozen Nova 冷冻波
用三角形面积什么的算算点到直线的距离之类……其实相切的情况是可行的……剩下的就跟某SDOI2015一样了. #include<cstdio> #include<cmath> # ...
- 【BZOJ1822】[JSOI2010]Frozen Nova 冷冻波 几何+二分+网络流
[BZOJ1822][JSOI2010]Frozen Nova 冷冻波 Description WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀 ...
- 1822: [JSOI2010]Frozen Nova 冷冻波 二分最大流
1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 585 Solved: 175[Subm ...
- 【bzoj1822】[JSOI2010]Frozen Nova 冷冻波 计算几何+二分+网络流最大流
题目描述 WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵.我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线 ...
- BZOJ 1822[JSOI2010]Frozen Nova 冷冻波
网络流+二分. n^3枚举判断每个巫妖可以攻击的精灵,向其连1的边,每个精灵向汇点连1的边. 二分答案,修改源点流向每个巫妖的cap,跑最大流看是否等于精灵数. 恩,看起来没什么毛病. 然后狂WA不止 ...
- BZOJ1822 Frozen Nova 冷冻波
1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MB Description WJJ喜欢“魔兽争霸”这个游戏. ...
- BZOJ-1822 Frozen Nova 冷冻波 计(jie)算(xi)几何+二分+最大流判定+经典建图
这道逼题!感受到了数学对我的深深恶意(#‵′).... 1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MB S ...
随机推荐
- 对C++指针的一个比喻
假如你身在上海,你的电脑出了一点问题,你解决不了,这时你想起了你的远在北京的朋友小D,此时小D打开了他的心爱的笔记本... c++中函数的参数传指针就像你用teamviewer与你的朋友小D建立连接, ...
- 「LuoguP1429」 平面最近点对(加强版)
题目描述 给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的 输入输出格式 输入格式: 第一行:n:2≤n≤200000 接下来n行:每行两个实数:x y, ...
- 【Lintcode】070.Binary Tree Level Order Traversal II
题目: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from ...
- 洛谷P2024食物链——并查集补集的灵活运用
题目:https://www.luogu.org/problemnew/show/P2024 自己在做本题时最大的障碍就是:不会在一个集合的father改变时把相应的补集也跟着改变. 借鉴题解后,才明 ...
- C# 获取Console的输入和输出 数据 (异步)
using System ; using System .Diagnostics; using System .IO; class Program { static void Main() ...
- mysql的itcast笔记
1 课程回顾 自定义标签&编码实战 1)自定义标签步骤: 1.1 编写标签处理器类,继承SimpleTagSupport类,覆盖doTag方法 1.2 在WEB-INF目录下建立tld文件,在 ...
- Code:Base64 编码/解码
ylbtech-Code:Base64 编码/解码 1. C#返回顶部 1.编码 byte[] inArray = new byte[msgTxt.Length]; int x; ; x < m ...
- 「一入 Java 深似海 」系列课程
第一期 「一入 Java 深似海 」系列课程 - 第一期 第一节:Java 语言基础
- Gym - 101611D Decoding of Varints(边界值处理)
Decoding of Varints Statements Varint is a type used to serializing integers using one or more bytes ...
- POJ1251 Jungle Roads Kruskal+scanf输入小技巧
Jungle Roads The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign ai ...