【计算几何】【二分答案】【最大流】bzoj1822 [JSOI2010]Frozen Nova 冷冻波
用三角形面积什么的算算点到直线的距离之类……其实相切的情况是可行的……剩下的就跟某SDOI2015一样了。
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
#define N 201
#define EPS 0.000001
#define INF 2147483647
struct Point{int x,y;}jl[N];
typedef Point Vector;
typedef double db;
Vector operator - (Point a,Point b){return (Vector){a.x-b.x,a.y-b.y};}
int Cross(Vector a,Vector b){return a.x*b.y-a.y*b.x;}
int sqr(int x){return x*x;}
db dis(Point a,Point b){return sqrt((db)(sqr(a.x-b.x)+sqr(a.y-b.y)));}
struct WY{Point p; int r,t;}wy[N];
struct SHU{Point p; int r;}shu[N];
int Abs(int x){return x<0?(-x):x;}
bool can[N][N];
int n,m,K;
bool Can_Attack(WY a,Point b)
{
if((db)a.r-dis(a.p,b)<EPS) return 0;
for(int i=1;i<=K;++i)
if((db)Abs(Cross(a.p-b,shu[i].p-b))/dis(a.p,b)-(db)shu[i].r<-EPS)
return 0;
return 1;
}
bool Must_Be_Attacked(int x)
{
for(int i=1;i<=n;++i)
if(can[i][x])
return 1;
return 0;
}
queue<int>q;
int nn,T,S;
int v[2*N*(N+1)],en,first[N*2+3],next[2*N*(N+1)],cap[2*N*(N+1)];
int d[N*2+3],cur[N*2+3];
void AddEdge(int U,int V,int Cap)
{
v[en]=V; cap[en]=Cap; next[en]=first[U]; first[U]=en++;
v[en]=U; cap[en]=0; next[en]=first[V]; first[V]=en++;
}
bool bfs()
{
memset(d,-1,sizeof(int)*(nn+1));
d[S]=0; q.push(S);
while(!q.empty())
{
int U=q.front(); q.pop();
for(int i=first[U];i!=-1;i=next[i])
if(cap[i]&&d[v[i]]==-1)
{
d[v[i]]=d[U]+1;
q.push(v[i]);
}
}
return d[T]!=-1;
}
int dfs(int U,int a)
{
if(U==T||(!a)) return a;
int Flow=0,f;
for(int i=first[U];i!=-1;i=next[i])
if(d[v[i]]==d[U]+1&&(f=dfs(v[i],min(a,cap[i]))))
{
cap[i]-=f;
cap[i^1]+=f;
Flow+=f;
a-=f;
if(!a)
break;
}
if(!Flow) d[U]=-1;
return Flow;
}
int MaxFlow()
{
int Flow=0,tmp;
while(bfs())
{
memcpy(cur,first,sizeof(int)*(nn+1));
while(tmp=dfs(S,INF)) Flow+=tmp;
}
return Flow;
}
bool check(int Lim)
{
memset(first,-1,sizeof(int)*(nn+1));
en=0;
for(int i=1;i<=n;++i) AddEdge(S,1+i,(!Lim)?1:(Lim/wy[i].t+1));
for(int i=1;i<=m;++i) AddEdge(1+n+i,T,1);
for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) if(can[i][j]) AddEdge(1+i,1+n+j,INF);
return MaxFlow()==m?1:0;
}
int main()
{
scanf("%d%d%d",&n,&m,&K);
for(int i=1;i<=n;++i) scanf("%d%d%d%d",&wy[i].p.x,&wy[i].p.y,&wy[i].r,&wy[i].t);
for(int i=1;i<=m;++i) scanf("%d%d",&jl[i].x,&jl[i].y);
for(int i=1;i<=K;++i) scanf("%d%d%d",&shu[i].p.x,&shu[i].p.y,&shu[i].r);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
can[i][j]=Can_Attack(wy[i],jl[j]);
for(int j=1;j<=m;++j) if(!Must_Be_Attacked(j)) {puts("-1"); return 0;}
T=nn=n+m+2; S=1;
int l=0,r=4000000;
while(r>l)
{
int mid=(l+r>>1);
if(check(mid)) r=mid;
else l=mid+1;
}
printf("%d\n",l);
return 0;
}
【计算几何】【二分答案】【最大流】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 冷冻波网络流
思路比较显然:二分答案,流流流 但是实现的时候感觉自己数学捉急.. 一开始算了个直线到点距离.... 应该是线段到点距离 #include <bits/stdc++.h> #define ...
- BZOJ1822 [JSOI2010]Frozen Nova 冷冻波 二分+最大流
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1822 题解 好久没做网络流的,都没有想到网络流... 首先暴力判断一下一个巫妖和一个精灵之间能 ...
- 1822: [JSOI2010]Frozen Nova 冷冻波 二分最大流
1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 585 Solved: 175[Subm ...
- 【BZOJ1822】[JSOI2010]Frozen Nova 冷冻波 几何+二分+网络流
[BZOJ1822][JSOI2010]Frozen Nova 冷冻波 Description WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀 ...
- 【bzoj1822】[JSOI2010]Frozen Nova 冷冻波 计算几何+二分+网络流最大流
题目描述 WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵.我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线 ...
- BZOJ 1822[JSOI2010]Frozen Nova 冷冻波
网络流+二分. n^3枚举判断每个巫妖可以攻击的精灵,向其连1的边,每个精灵向汇点连1的边. 二分答案,修改源点流向每个巫妖的cap,跑最大流看是否等于精灵数. 恩,看起来没什么毛病. 然后狂WA不止 ...
- BZOJ-1822 Frozen Nova 冷冻波 计(jie)算(xi)几何+二分+最大流判定+经典建图
这道逼题!感受到了数学对我的深深恶意(#‵′).... 1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MB S ...
- BZOJ1822 Frozen Nova 冷冻波
1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MB Description WJJ喜欢“魔兽争霸”这个游戏. ...
随机推荐
- SICAU-OJ:要我唱几首歌才能够将你捕捉
要我唱几首歌才能够将你捕捉 题意: 有N种颜色的牛,现在可以执行以下两种操作: 1.抓捕一只牛,代价为ai: 2.花费x的代价使用魔法,让所有颜色加1,N会变为1. 求得到N种颜色的牛最少花费的代价. ...
- CentOS 6.4安装配置ldap
CentOS 6.5安装配置ldap 时间:2015-07-14 00:54来源:blog.51cto.com 作者:"ly36843运维" 博客 举报 点击:274次 一.安装l ...
- php魔术方法的使用
本文测试环境为 php5.5.12 一.__get .__set 将对象的属性进行接管. 一般来说,总是把类的属性定义为private,但是对属性的读取和赋值操作非常频繁,在php5+,预定义__se ...
- SpringMVC学习 -- REST
REST:表现层状态转化. REST 是目前最流行的一种互联网软件架构.他结构清晰.符合标准.易于理解.扩展方便 , 所以正得到越来越多网站的采用. 状态转化:浏览器 form 表单只支持 GET 和 ...
- cxf+spring发布webservice和调用
maven项目配置http://cxf.apache.org/docs/using-cxf-with-maven.html <properties> <cxf.version> ...
- 【BZOJ1101】Zap [莫比乌斯反演]
Zap Time Limit: 10 Sec Memory Limit: 162 MB[Submit][Status][Discuss] Description 对于给定的整数a,b和d,有多少正整 ...
- 01-UIDynamic简单演练demo源代码
源代码下载: 01-简单演练.zip72.0 KB // // ViewController.m // 01.简单演练 // // Created by apple on 13-12-24. / ...
- [bzoj3224]Tyvj 1728 普通平衡树——splay模板
题目 你需要写一种数据结构支援以下操作. 插入元素. 删除元素. 查询元素的排名. 查询第k小的元素. 查询元素前趋. 查询元素后继. 题解 BBST裸题. 代码 #include <cstdi ...
- bzoj 1022 SJ定理
与传统的SG游戏不同的是,完成最后一个状态的人是输的,我们把这一类问题称作Anti-SG,这类问题的解决我们需要引入一个定理—SJ定理: 对于任意一个Anti-SG游戏,如果我们规定当局面中所有的单一 ...
- python函数对象和闭包
关于函数对象和闭包 闭包(closure)是函数式编程的重要的语法结构.不同的语言实现闭包的方式不同.Python以函数对象为基础,为闭包这一语法结构提供支持的 (我们在特殊方法与多范式中,已经多次看 ...