【BZOJ1822】[JSOI2010]Frozen Nova 冷冻波 几何+二分+网络流
【BZOJ1822】[JSOI2010]Frozen Nova 冷冻波
Description
Input
Output
Sample Input
-100 0 100 3
100 0 100 5
-100 -10
100 10
110 11
5 5 10
Sample Output
题解:先判断哪些巫妖能杀死哪些小精灵,然后做法就跟dance那道题一样,直接二分答案,然后跑网络流判定就好了
具体建边方法:设二分答案mid,巫妖攻击间隔t[i]
1.S->巫妖i 容量mid/t[i]+1
2.巫妖i->小精灵j 容量1
3.小精灵j->T 容量1
然后就是怎么判断巫妖i能不能打到小精灵j的问题了
你可能需要这个东西
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- #include <queue>
- #define n2(_) ((_)*(_))
- using namespace std;
- typedef long long ll;
- int n,m,k,cnt,S,T,ans,tot;
- int to[500010],next[500010],val[500010],head[500],d[500],map[210][210],pf[210],pt[210];
- ll px[210],py[210],qx[210],qy[210],tx[210],ty[210],tr[210];
- queue<int> q;
- int dfs(int x,int mf)
- {
- if(x==T) return mf;
- int i,k,temp=mf;
- for(i=head[x];i!=-1;i=next[i])
- {
- if(d[to[i]]==d[x]+1&&val[i])
- {
- k=dfs(to[i],min(temp,val[i]));
- if(!k) d[to[i]]=0;
- val[i]-=k,val[i^1]+=k,temp-=k;
- if(!temp) break;
- }
- }
- return mf-temp;
- }
- int bfs()
- {
- memset(d,0,sizeof(d));
- while(!q.empty()) q.pop();
- int i,u;
- q.push(S),d[S]=1;
- while(!q.empty())
- {
- u=q.front(),q.pop();
- for(i=head[u];i!=-1;i=next[i])
- {
- if(val[i]&&!d[to[i]])
- {
- d[to[i]]=d[u]+1;
- if(to[i]==T) return 1;
- q.push(to[i]);
- }
- }
- }
- return 0;
- }
- void add(int a,int b,int c)
- {
- to[cnt]=b,val[cnt]=c,next[cnt]=head[a],head[a]=cnt++;
- to[cnt]=a,val[cnt]=0,next[cnt]=head[b],head[b]=cnt++;
- }
- int solve(int sta)
- {
- int i,j,l;
- cnt=0,ans=0,tot=0;
- memset(head,-1,sizeof(head));
- S=0,T=n+m+1;
- for(i=1;i<=n;i++) add(S,i,sta/pt[i]+1),tot+=sta/pt[i]+1;
- if(tot<m) return 0;
- for(i=1;i<=m;i++) add(i+n,T,1);
- for(i=1;i<=n;i++)
- for(j=1;j<=m;j++)
- if(map[i][j])
- add(i,j+n,1);
- while(bfs()) ans+=dfs(S,1<<30);
- return ans==m;
- }
- int main()
- {
- scanf("%d%d%d",&n,&m,&k);
- int i,j,l,r=0,mid;
- for(i=1;i<=n;i++) scanf("%lld%lld%lld%lld",&px[i],&py[i],&pf[i],&pt[i]),r=max(r,pt[i]);
- for(i=1;i<=m;i++) scanf("%lld%lld",&qx[i],&qy[i]);
- for(i=1;i<=k;i++) scanf("%lld%lld%lld",&tx[i],&ty[i],&tr[i]);
- for(i=1;i<=n;i++)
- {
- for(j=1;j<=m;j++)
- {
- if(n2(qx[j]-px[i])+n2(qy[j]-py[i])>n2(pf[i])) continue;
- for(l=1;l<=k;l++)
- {
- ll a=(tx[l]-px[i])*(qx[j]-px[i])+(ty[l]-py[i])*(qy[j]-py[i]),b,c=tr[l]*tr[l];
- if(a<=0) b=n2(tx[l]-px[i])+n2(ty[l]-py[i]);
- else if(a>=n2(qx[j]-px[i])+n2(qy[j]-py[i]))
- b=n2(tx[l]-qx[j])+n2(ty[l]-qy[j]);
- else b=n2((qy[j]-py[i])*tx[l]+(px[i]-qx[j])*ty[l]+qx[j]*py[i]-px[i]*qy[j]),
- c*=n2(qy[j]-py[i])+n2(px[i]-qx[j]);
- if(b<c) break;
- }
- if(l==k+1) map[i][j]=1;
- }
- }
- l=0,r=4000001,mid;
- while(l<r)
- {
- mid=l+r>>1;
- if(solve(mid)) r=mid;
- else l=mid+1;
- }
- if(r==4000001) printf("-1");
- else printf("%d",r);
- return 0;
- }
【BZOJ1822】[JSOI2010]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喜欢“魔兽争霸”这个游戏.在游戏中,巫妖 ...
- 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 冷冻波网络流
思路比较显然:二分答案,流流流 但是实现的时候感觉自己数学捉急.. 一开始算了个直线到点距离.... 应该是线段到点距离 #include <bits/stdc++.h> #define ...
- 1822: [JSOI2010]Frozen Nova 冷冻波 二分最大流
1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 585 Solved: 175[Subm ...
- 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喜欢“魔兽争霸”这个游戏. ...
随机推荐
- AFN访问https设置
AFN访问https的时候需要设定如下两个属性: manager.securityPolicy.allowInvalidCertificates = YES; manager.securityPoli ...
- Android Unique Device ID
There are several occasions when the unique identifier of a device is required. For instance you nee ...
- 从1KW条数据中筛选出1W条最大的数
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...
- Ooui:在浏览器中运行.NET应用 Ooui.Wasm:浏览器中的.NET
在过去数年中,桌面应用开发人员一直处境艰难,因为人们的主要关注点聚焦于Web和移动应用.由于Microsoft未来Windows平台的计划未定,并且UWP应用也没有突破性进展,因此技术落伍的责任也不应 ...
- 转在Python中实现PageFactory模式
转自: http://www.cnblogs.com/fnng/p/5092383.html 关于 PageFactory 的概念主要是Java中内置了PageFactory类. import org ...
- Android中的倒计时实现
一.android.os包下提供了倒计时的抽象工具类: public abstract class CountDownTimer { /** * Millis since epoch when ala ...
- Android studio 使用心得(四)—android studio 多渠道打包(二)
Android studio 使用心得(四)—android studio 多渠道打包 这篇文章讲了一种打包方式.是直接在android studio 里面可视化操作,结合配置文件.我个人觉得严格上来 ...
- Scrapy使用问题整理(转载)
转载自:http://blog.csdn.net/heu07111121/article/details/50832999 最近尝试使用Scrapy进行数据抓取,并尝试在windows7 64位系 ...
- LINQ - 在Where條件式中使用in與not in(转载)
算算時間,接觸LINQ也有一個月的時間了,可以算是落伍兼新生,不過最近在寫專案的時候,遇到了在LINQ的Where條件式中要如何使用in與 not in呢!? 這時候真的只能坐在位子上仰天長笑,開始懷 ...
- 在intellij中使用checkStyle进行代码规范
1 编写代码检测规则可以参考阿里和google的规则和checkstyle的官网文档.checkstyle官网地址http://checkstyle.sourceforge.net/ 假设自己的sty ...