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 ...
随机推荐
- BZOJ 1370 [Baltic2003]Gang团伙:并查集【虚点】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1370 题意: 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足: (1)我 ...
- RQNOJ 117 最佳课题选择:多重背包
题目链接:https://www.rqnoj.cn/problem/117 题意: NaCN_JDavidQ要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择. 由于课题数有限,NaCN_JD ...
- leetcode 43. Multiply Strings(高精度乘法)
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...
- C字符串末尾的'\0'问题
C语言的字符串要注意最后一位默认是'/0'的问题.这是一个易错点. strlen()计算长度时不考虑末尾的'\0' //例1 void test1() { ]; "; strcpy( str ...
- less语言特性
作为CSS的一种扩展,LESSCSS不仅向下兼容CSS的语法,而且连新增的特性也是使用CSS的语法.这样的设计使得学习LESS很轻松,而且你可以在任何时候回退到CSS. 变量 很容易理解: @nice ...
- 机器学习: Logistic Regression--python
今天介绍 logistic regression,虽然里面有 regression 这个词,但是这其实是一种分类的方法,这个分类方法输出的也是 0-1 之间的一个数,可以看成是一种概率输出,这个分类器 ...
- 【Python】python2.7 安装配置OpenCV2
环境:Ubuntu16.04 anaconda Python2.7 opencv2.4.13 安装opencv后 import cv2 遇到错误信息: No module named cv2 安装op ...
- WPF ValidationRule 触发ErrorTemplate 的注意事项
ValidationRule 验证时, 当验证失败后,再次验证成功, errorTemplate 还是触发, 不会被清掉. 因此需要主动调用 Validation.ClearInvalid(dtpTe ...
- Hadoop安装全教程 Ubuntu14.04+Java1.8.0+Hadoop2.7.6
最近听了一个关于大数据的大牛的经验分享,在分享的最后大牛给我们一个他之前写好的关于大数据和地理应用demo.这个demo需要在Linux环境上搭建Hadoop平台.这次就简单的分享一下我关于在 Lin ...
- u-boot.lds 链接脚本分析(hi3515)
目录:/u-boot_hi3515/board/hi3515v100 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm& ...