BZOJ1822 Frozen Nova 冷冻波
1822: [JSOI2010]Frozen Nova 冷冻波
Time Limit: 10 Sec Memory Limit: 64 MB
Description
Input
Output
Sample Input
-100 0 100 3
100 0 100 5
-100 -10
100 10
110 11
5 5 10
Sample Output
Source
题解
网络流 + 二分答案 + 计算几何
计算几何用点积和叉积计算点到线段距离,二分所需时间,网络流验证是否可行
大水题,数据有点坑qwq
代码
#include<bits/stdc++.h>
using namespace std;
template <class _T> inline void read(_T &_x) {
int _t; bool flag = false;
while ((_t = getchar()) != '-' && (_t < '' || _t > '')) ;
if (_t == '-') _t = getchar(), flag = true; _x = _t - '';
while ((_t = getchar()) >= '' && _t <= '') _x = _x * + _t - '';
if (flag) _x = -_x;
}
typedef long long LL;
const int maxn = ;
const int maxm = ;
const double eps = 1e-;
inline int sign(double val) {return val < -eps ? - : val > eps; }
struct Point {
double x, y;
Point (double a = , double b = ):x(a), y(b) {}
}A[maxn], B[maxn], C[maxn];
double rA[maxn], rC[maxn];
double dot(Point a, Point b, Point c) {
return (b.x - a.x) * (c.x - a.x) + (b.y - a.y) * (c.y - a.y);
}
double cross(Point a, Point b, Point c) {
return (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y);
}
double dist(Point a, Point b) {
return hypot(a.x - b.x, a.y - b.y);
}
double ldis(Point a, Point b, Point c) {
if (dot(c, a, b) > ) return min(dist(a, c), dist(b, c));
return fabs(cross(a, b, c) / dist(a, b));
}
bool check(Point a, Point b, Point c, int pc) {
double dis = dist(a, b), r = dot(a, b, c) / dis;
if (r < || r > dis) return true;
return sign(fabs(cross(a, b, c) / r) - rC[pc]) > ;
}
struct Edge {
int v, flow, nxt;
Edge () {}
Edge (int a, int b, int c):v(a), flow(b), nxt(c) {}
}e[maxm];
int n, m, k, t[maxn], sink;
int fir[maxn], tag[maxn], cur[maxn], ecnt;
bool can[maxn][maxn];
inline void addedge (int a, int b, int c) {
e[++ecnt] = Edge (b, c, fir[a]), fir[a] = ecnt;
e[++ecnt] = Edge (a, , fir[b]), fir[b] = ecnt;
}
inline bool bfs() {
memset(tag, , sizeof (int) * (sink + ));
queue<int> q; q.push(), tag[] = ;
while (!q.empty()) {
int now = q.front(); q.pop();
for (int u = fir[now]; u; u = e[u].nxt) {
if (e[u].flow && !tag[e[u].v]) {
tag[e[u].v] = tag[now] + ;
q.push(e[u].v);
}
}
}
return tag[sink] != ;
}
int dfs(int now, int flow) {
if (now == sink) return flow;
int usd = ;
for (int &u = cur[now]; u; u = e[u].nxt) {
if (e[u].flow && tag[e[u].v] > tag[now]) {
int ret = dfs(e[u].v, min(e[u].flow, flow - usd));
if (ret) {
e[u].flow -= ret;
e[u ^ ].flow += ret;
usd += ret;
if (usd == flow) return flow;
}
}
}
return usd;
}
inline int dinic() {
int flow = ;
while (bfs()) {
for (int i = ; i <= sink; ++i) cur[i] = fir[i];
flow += dfs(, m);
}
return flow;
}
bool check(int tim) {
memset(fir, , sizeof (int) * (sink + ));
ecnt = ;
for (int i = ; i <= n; ++i) {
addedge(, i, tim / t[i] + );
for (int j = ; j <= m; ++j) if (can[i][j]) {
addedge(i, n + j, );
}
}
for (int i = ; i <= m; ++i) addedge(n + i, sink, );
return dinic() >= m;
}
int main() {
//freopen(".in", "r", stdin);
//freopen(".out", "w", stdout);
read(n), read(m), read(k);
for (int i = ; i <= n; ++i) {
scanf("%lf%lf%lf%d", &A[i].x, &A[i].y, &rA[i], &t[i]);
}
for (int i = ; i <= m; ++i) {
scanf("%lf%lf", &B[i].x, &B[i].y);
}
for (int i = ; i <= k; ++i) {
scanf("%lf%lf%lf", &C[i].x, &C[i].y, &rC[i]);
}
for (int i = ; i <= n; ++i) {
for (int j = ; j <= m; ++j) {
bool flag = true;
double dis = dist(A[i], B[j]);
if (dis > rA[i]) continue;
for (int x = ; x <= k; ++x) {
if (ldis(A[i], B[j], C[x]) < rC[x]) {
flag = false;
break;
}
}
if (flag) can[i][j] = true;
}
}
for (int i = ; i <= m; ++i) {
bool flag = false;
for (int j = ; j <= n; ++j) if (can[j][i]) {
flag = true; break;
}
if (!flag) {
puts("-1");
return ;
}
}
sink = n + m + ;
int l = , r = * m, mid;
while (l < r) {
if (check(mid = (l + r) >> )) r = mid;
else l = mid + ;
}
cout << l << endl;
return ;
}
BZOJ1822 Frozen Nova 冷冻波的更多相关文章
- BZOJ-1822 Frozen Nova 冷冻波 计(jie)算(xi)几何+二分+最大流判定+经典建图
这道逼题!感受到了数学对我的深深恶意(#‵′).... 1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MB S ...
- 【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 冷冻波
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1933 Solved: 608 Description WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖 ...
- 【bzoj1822】[JSOI2010]Frozen Nova 冷冻波 计算几何+二分+网络流最大流
题目描述 WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵.我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线 ...
- BZOJ 1822 Frozen Nova 冷冻波(最大流)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1822 题意:WJJ喜欢“魔兽争霸”这个游戏.在 游戏中,巫妖是一种强大的英雄,它的技能F ...
- 【计算几何】【二分答案】【最大流】bzoj1822 [JSOI2010]Frozen Nova 冷冻波
用三角形面积什么的算算点到直线的距离之类……其实相切的情况是可行的……剩下的就跟某SDOI2015一样了. #include<cstdio> #include<cmath> # ...
- bzoj1822: [JSOI2010]Frozen Nova 冷冻波网络流
思路比较显然:二分答案,流流流 但是实现的时候感觉自己数学捉急.. 一开始算了个直线到点距离.... 应该是线段到点距离 #include <bits/stdc++.h> #define ...
- BZOJ1822 [JSOI2010]Frozen Nova 冷冻波 二分+最大流
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1822 题解 好久没做网络流的,都没有想到网络流... 首先暴力判断一下一个巫妖和一个精灵之间能 ...
随机推荐
- Alpha阶段事后诸葛分析
一.设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件主要是解决在宿舍中购买商品的软件,不同于淘宝等软件,本软件主要是用于学生开设的店铺及宿 ...
- QtCreator源码分析—2.启动主程序(4篇)
QtCreator采用插件体系结构.主程序启动插件管理器(PluginManager),再通过插件管理器加载其插件,QtCreator的所有功能均使用插件实现. 我们先来分析主程序对插件管理器的主要操 ...
- Java代码中谁拿到了锁?
我们都知道当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁.这些基础也许大家都知道,但是很多人还是搞不清哪个对象才是锁?如果你能正确回答以下问题,那么才算你彻底搞明白了哪个 ...
- 多态在编译器是无法确定引用类型的是哪个子类 可以用 instanceof 在运行期判断
- Window系统 安装TFLearn
1. 确保成功安装了tensorflow 2. 查看当前tensorflow下的库文件,判断是否已经安装了h5py,scipy:conda list 3. 若没有安装,安装h5py,scipy.我的电 ...
- MySQL 测试工具(基准测试、压力测试)
1.sysbench sysbench是跨平台的基准测试工具,支持多线程,支持多种数据库: 主要包括以下几种测试: cpu性能 磁盘io性能 调度程序性能 内存分配及传输速度 POSIX线程性能 数据 ...
- Golang基础(二)
1. 条件语句 if ... else if ... else... package main import "fmt" func main() { { fmt.Printf(&q ...
- Be the Winner HDU - 2509(反博弈。。这样叫应该没错吧。。)
就是 好几堆苹果 每堆苹果排成一条线 可以任意从每堆拿苹果 如果一堆苹果里拿了之后 则有两种情况 1.从不是边缘拿 拿完这一堆变成两堆 2.从边缘拿 拿完还是一堆 题目还要求 谁 ...
- 【转】ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别
转自:http://blog.csdn.net/fanfanjin/article/details/6676566 在iBATIS中 isNull用于判断参数是否为Null,isNotNull相反 i ...
- 一种KEIL中定义过的变量在使用中提示未定义的情况
[环境] > KEIL5.25 > win10 > @2018-4-23 [问题] 头文件互包含导致的错误(使用了另一文件的类型定义) 文件<fileA.h> <f ...