1822: [JSOI2010]Frozen Nova 冷冻波 二分最大流
1822: [JSOI2010]Frozen Nova 冷冻波
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 585 Solved: 175
[Submit][Status]
Description
Input
Output
- #include <set>
- #include <map>
- #include <list>
- #include <cmath>
- #include <queue>
- #include <stack>
- #include <string>
- #include <vector>
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- #define debug puts("here")
- #define rep(i,n) for(int i=0;i<n;i++)
- #define rep1(i,n) for(int i=1;i<=n;i++)
- #define REP(i,a,b) for(int i=a;i<=b;i++)
- #define foreach(i,vec) for(unsigned i=0;i<vec.size();i++)
- #define pb push_back
- #define RD(n) scanf("%d",&n)
- #define RD2(x,y) scanf("%d%d",&x,&y)
- #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
- #define RD4(x,y,z,w) scanf("%d%d%d%d",&x,&y,&z,&w)
- #define All(vec) vec.begin(),vec.end()
- #define MP make_pair
- #define PII pair<int,int>
- #define PQ priority_queue
- #define cmax(x,y) x = max(x,y)
- #define cmin(x,y) x = min(x,y)
- #define Clear(x) memset(x,0,sizeof(x))
- /*
- #pragma comment(linker, "/STACK:1024000000,1024000000")
- int size = 256 << 20; // 256MB
- char *p = (char*)malloc(size) + size;
- __asm__("movl %0, %%esp\n" :: "r"(p) );
- */
- /******** program ********************/
- const int MAXN = 505;
- const int MAXM = 100005;
- const int INF = 1e9;
- const double eps = 1e-8;
- bool use[205][205];
- int po[MAXN],tol;
- int gap[MAXN],dis[MAXN],arc[MAXN],pre[MAXN],cur[MAXN];
- int n,m,kk,vs,vt;
- struct A{
- int x,y,r,t;
- inline void rd(){
- RD4(x,y,r,t);
- }
- }a[MAXN];
- struct B{
- int x,y;
- inline void rd(){
- RD2(x,y);
- }
- }b[MAXN];
- struct C{
- int x,y,r;
- inline void rd(){
- RD3(x,y,r);
- }
- }c[MAXN];
- struct node{
- int y,f,next;
- }edge[MAXM];
- inline void Add(int x,int y,int f){
- edge[++tol].y = y;
- edge[tol].f = f;
- edge[tol].next = po[x];
- po[x] = tol;
- }
- inline void add(int x,int y,int f){
- Add(x,y,f);
- Add(y,x,0);
- }
- inline int sap(){
- memset(dis,0,sizeof(dis));
- memset(gap,0,sizeof(gap));
- gap[0] = vt;
- rep1(i,vt)
- arc[i] = po[i];
- int ans = 0;
- int aug = INF;
- int x = vs;
- while(dis[vs]<vt){
- bool ok = false;
- cur[x] = aug;
- for(int i=arc[x];i;i=edge[i].next){
- int y = edge[i].y;
- if(edge[i].f>0&&dis[y]+1==dis[x]){
- ok = true;
- pre[y] = arc[x] = i;
- aug = min(aug,edge[i].f);
- x = y;
- if(x==vt){
- ans += aug;
- while(x!=vs){
- edge[pre[x]].f -= aug;
- edge[pre[x]^1].f += aug;
- x = edge[pre[x]^1].y;
- }
- aug = INF;
- }
- break;
- }
- }
- if(ok)
- continue;
- int MIN = vt-1;
- for(int i=po[x];i;i=edge[i].next)
- if(edge[i].f>0&&dis[edge[i].y]<MIN){
- MIN = dis[edge[i].y];
- arc[x] = i;
- }
- if(--gap[dis[x]]==0)
- break;
- dis[x] = ++ MIN;
- ++ gap[dis[x]];
- if(x!=vs){
- x = edge[pre[x]^1].y;
- aug = cur[x];
- }
- }
- return ans;
- }
- inline int cdis(int x,int y){
- return x*x+y*y;
- }
- inline bool check(A pa,B pb,C pc){
- double a = sqrt( cdis(pa.x-pb.x,pa.y-pb.y)*1.0 );
- double b = sqrt( cdis(pc.x-pb.x,pc.y-pb.y)*1.0 );
- double c = sqrt( cdis(pa.x-pc.x,pa.y-pc.y)*1.0 );
- double p = (a+b+c)/2;
- double s = p*(p-a)*(p-b)*(p-c); // 海伦公式
- double tmp = a*pc.r/2;
- tmp *= tmp;
- if( tmp>=s )
- return false;
- return true;
- }
- inline void init(){ // 预处理
- rep1(i,n){ // x,y,r,t
- rep1(j,m){ // x,y
- if( cdis(a[i].x-b[j].x,a[i].y-b[j].y)>a[i].r*a[i].r ){
- use[i][j] = false;
- continue;
- }
- use[i][j] = true;
- rep1(k,kk){ // x,y,r
- if(!check(a[i],b[j],c[k])){
- use[i][j] = false;
- break;
- }
- }
- }
- }
- }
- inline bool ok(int mid){ // 判断二分的答案是否可行
- vs = MAXN-3;
- vt = vs+1;
- Clear(po);
- tol = 1;
- rep1(i,n)
- add(vs,i,mid/a[i].t+1);
- rep1(i,n)
- rep1(j,m)
- if(use[i][j])
- add(i,j+n,1);
- rep1(j,m)
- add(j+n,vt,1);
- return sap()>=m;
- }
- int main(){
- #ifndef ONLINE_JUDGE
- freopen("sum.in","r",stdin);
- //freopen("sum.out","w",stdout);
- #endif
- while(~RD3(n,m,kk)){
- rep1(i,n)
- a[i].rd();
- rep1(i,m)
- b[i].rd();
- rep1(i,kk)
- c[i].rd();
- init(); // 预处理
- int l = 0 , r = INF;
- int ans = -1;
- while(l<=r){
- int mid = (l+r)>>1;
- if(ok(mid)){
- r = mid-1;
- ans = mid;
- }else
- l = mid+1;
- }
- cout<<ans<<endl;
- }
- return 0;
- }
1822: [JSOI2010]Frozen Nova 冷冻波 二分最大流的更多相关文章
- BZOJ1822 [JSOI2010]Frozen Nova 冷冻波 二分+最大流
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1822 题解 好久没做网络流的,都没有想到网络流... 首先暴力判断一下一个巫妖和一个精灵之间能 ...
- BZOJ 1822[JSOI2010]Frozen Nova 冷冻波
网络流+二分. n^3枚举判断每个巫妖可以攻击的精灵,向其连1的边,每个精灵向汇点连1的边. 二分答案,修改源点流向每个巫妖的cap,跑最大流看是否等于精灵数. 恩,看起来没什么毛病. 然后狂WA不止 ...
- 【BZOJ1822】[JSOI2010]Frozen Nova 冷冻波 几何+二分+网络流
[BZOJ1822][JSOI2010]Frozen Nova 冷冻波 Description WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀 ...
- 【bzoj1822】[JSOI2010]Frozen Nova 冷冻波 计算几何+二分+网络流最大流
题目描述 WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵.我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线 ...
- Bzoj1822 [JSOI2010]Frozen Nova 冷冻波
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1933 Solved: 608 Description WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖 ...
- 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 ...
- BZOJ-1822 Frozen Nova 冷冻波 计(jie)算(xi)几何+二分+最大流判定+经典建图
这道逼题!感受到了数学对我的深深恶意(#‵′).... 1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MB S ...
随机推荐
- 自行架设DNS的操作步骤及相关说明
关于什么是DNS及相关的名词及说明,请看 http://www.wdlinux.cn/bbs/viewthread.php?tid=1081&highlight=dns这里,只是说明,在wdd ...
- HITAG 2 125kHz RFID IC Read-Write 256 bits
Features 256 bits EEPROM memory organized in 8 pages of 32 bits each 32 bits unique factory programm ...
- IE下实现类似CSS3 text-shadow文字阴影的几种方法
IE下实现类似CSS3 text-shadow文字阴影的几种方法 一.开始的擦边话 为了测试IE9浏览器,下午晃晃荡荡把系统换成window7的了.果然,正如网上所传言的一样,IE9浏览器确实不支持C ...
- C++ for循环效率
1.考虑二维数组,在C++中,以先行后列的方式存储连续的数组元素.也就是同一行的元素在一起,同一列的元素之间有间隔,且间隔相同.理想情况下,二维数组的元素是随机访问的,可以直接定位,即i*列数+j.因 ...
- CodeForces 176A Trading Business 贪心
Trading Business 题目连接: http://codeforces.com/problemset/problem/176/A Description To get money for a ...
- Codeforces Round #188 (Div. 2) C. Perfect Pair 数学
B. Strings of Power Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/318/p ...
- Lua游戏脚本语言入门(一)
作者: 沐枫 (第二人生成员) 原文地址:http://job.17173.com/content/2009-01-22/20090122143452606,1.shtml 在这篇文章中,我想向大家介 ...
- $parse/$eval和$observe/$watch如何区分
大家在看angular的时候,有时候偶尔会看到$parse,$eval和$observe,$watch这两对语法,随着深入使用angular,就不可避免使用到它.文章从内部运行机制跟实际需求的角度来解 ...
- 纯css3实现的动画加载特效
之前给大家带了很多款进度加载条,今天再给大家分享一款纯css3实现的动画加载特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class="wrap& ...
- sqlserver 行转列 语文,数学,物理,化学
数据库查询行转列 1.原数据库值 stdname stdsubject result 张三 语文 张三 数学 张三 物理 李四 语文 李四 数学 李四 物理 李四 化学 李四 化学 2.要得到如下表 ...