Pahom on Water(最大流)
Pahom on Water
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 770 Accepted Submission(s): 353
2
400.0 0 0 4
789.0 7 0 2
4
400.0 0 0 4
789.0 7 0 2
500.35 5 0 2
500.32 5 0 3
Game is VALID
题解:题意就是光圈相交了才能走,只能从频率大的到小的,问是否能从红光到紫光再回到红光,红光到紫光频率要从小到大<<<<紫光到红光频率要从大到小>>>>>,由此直接红光与源点连,紫光连汇点,频率从小到大,就加边,能从红到紫,自然能从紫到红了;
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
#define mem(x,y) memset(x,y,sizeof(x))
const int INF=0x3f3f3f3f;
const int MAXN=;
const int MAXM=<<;
struct Edge{
int from,to,next,cup,flow;
};
Edge edg[MAXM];
int head[MAXM],dis[MAXN],edgnum,vis[MAXN],h[MAXM];
void initial(){
edgnum=;mem(head,-);
}
struct Dot{
double fq,x,y,r;
}dt[];
void add(int u,int v,int w){
Edge E={u,v,head[u],w,};
edg[edgnum]=E;
head[u]=edgnum++;
E={v,u,head[v],,};
edg[edgnum]=E;
head[v]=edgnum++;
}
bool bfs(int s,int e){
mem(dis,-);mem(vis,);
queue<int>dl;
dis[s]=;vis[s]=;dl.push(s);
while(!dl.empty()){
int u=dl.front();
dl.pop();
for(int i=head[u];i!=-;i=edg[i].next){
Edge v=edg[i];
if(!vis[v.to]&&v.cup-v.flow){
vis[v.to]=;
dis[v.to]=dis[u]+;
dl.push(v.to);//
if(v.to==e)return true;
}
}
}
return false;
}
int dfs(int x,int la,int e){ if(x==e||la==)return la;
int temp,flow=;
for(int i=h[x];i!=-;i=edg[i].next){
Edge &v=edg[i];
if(dis[v.to]==dis[x]+&&(temp=dfs(v.to,min(la,v.cup-v.flow),e))>){
flow+=temp;
v.flow+=temp;
edg[i^].flow-=temp;
la-=temp;
if(la==)break;
}
}
return flow;
}
int maxflow(int s,int e){
int flow=;
while(bfs(s,e)){
memcpy(h,head,sizeof(head));
flow+=dfs(s,INF,e);
}
return flow;
}
bool judge(Dot a,Dot b){
if(a.fq<b.fq&&(pow(b.x-a.x,)+pow(b.y-a.y,)<pow(b.r+a.r,)))return true;
return false;
}
int main(){
int k,N;
scanf("%d",&k);
while(k--){
initial();
scanf("%d",&N);
for(int i=;i<=N;i++){
scanf("%lf%lf%lf%lf",&dt[i].fq,&dt[i].x,&dt[i].y,&dt[i].r);
if(fabs(789.0-dt[i].fq)<=1e-)add(i,N+,);
if(fabs(dt[i].fq-400.0)<=1e-)add(,i,);
}
for(int i=;i<=N;i++){
for(int j=;j<=N;j++){
if(i==j)continue;
if(judge(dt[i],dt[j]))add(i,j,);
}
}
if(maxflow(,N+)==)puts("Game is VALID");
else puts("Game is NOT VALID");
}
return ;
}
Pahom on Water(最大流)的更多相关文章
- HDU 4183 Pahom on Water(最大流SAP)
Pahom on Water Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdoj 4183 Pahom on Water
Pahom on Water Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 4183 Pahom on Water(最大流)
https://vjudge.net/problem/HDU-4183 题意: 这道题目的英文实在是很难理解啊. 给出n个圆,每个圆有频率,x.y轴和半径r4个属性,每次将频率为400的圆作为起点,频 ...
- HDU4183 Pahom on Water(来回走最大流,一个点只经过一次)
题意: 有n个圆,每个圆的中心和半径和一个频率都给定,只有一个频率最高的789为紫色,只有一个最低的400为红色,规则如下: 1.当两个圆严格相交时,且人是从红色到紫色的方向运动时可以由低频率向高频率 ...
- 【HDOJ】4183 Pahom on Water
就是一个网络流.red结点容量为2,查看最大流量是否大于等于2.对于条件2,把边反向加入建图.条件1,边正向加入建图. /* 4183 */ #include <iostream> #in ...
- hdu 4183 EK最大流算法
欢迎参加——每周六晚的BestCoder(有米!) Pahom on Water Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327 ...
- hdu 4183(网络流)
Pahom on Water Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 4183Pahom on Water(网络流之最大流)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4183 这题题目意思非常难看懂..我看了好长时间也没看懂..终于是从网上找的翻译. .我就在这翻译一下吧 ...
- [LeetCode] Pacific Atlantic Water Flow 太平洋大西洋水流
Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...
随机推荐
- DropDownList为啥总是获取第一项的值???
小菜: DropDownList控件绑定的数据,在获取数据时总是获取到第一项,很是郁闷,怎么回事,于是就各种想,都没有找到问题的原因. 请看下面的代码 前台代码: <asp:DropDownLi ...
- C++运算符重载为成员函数
#include<iostream> using namespace std; class Complex{ public: Complex(double r=0.0,double i=0 ...
- ubuntu 中 ThinkPHP 上传文件无法得到文件名
在 419-424 行.
- 使用Xib添加自定义View
1.新建Cocoa Touch Class以及UI View,2者同名 2.设置UI View的File's Owner——Custom Class为之前新建类 3.设置Xib中View与类关联 4. ...
- N个任务掌握java系列之统计一篇文章中单词出现的次数
问题:统计一篇文章中单词出现的次数 思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词)数组中. (2)定义一个Map,key是字符串类型,保存单词:valu ...
- HDOJ 3415 Max Sum of Max-K-sub-sequence(单调队列)
因为是circle sequence,可以在序列最后+序列前n项(或前k项);利用前缀和思想,预处理出前i个数的和为sum[i],则i~j的和就为sum[j]-sum[i-1],对于每个j,取最小的s ...
- Jps介绍以及解决jps无法查看某个已经启动的java进程问题【盗用】
1.jps的作用 jps类似linux的ps命令,不同的是ps是用来显示进程,而jps只显示java进程,准确的说是当前用户已启动的部分java进程信息,信息包括进程号和简短的进程command. 2 ...
- SQL Server配置管理WMI问题
今天在打开数据库的时候,连接不上.一看错误就知道肯定是SQL Server的服务没开启,所以自然而然的去SQL Server配置管理中去打开,但是打开配置管理器的时候出现了下面的错误: ...
- selenium 学习笔记 ---新手学习记录(7) 问题总结(java)
1.想要获取固定ul下所有li的个数 如下图: //获取ul下li的个数 List<WebElement> elements = driver.findElement(By.id(&qu ...
- Cyclomatic complexity
Cyclomatic Code Complexity was first introduced by Thomas McCabe in 1976. In 1976, Thomas McCabe pub ...