最大流 hdu 4183
/**
hdu 4183
求两点之间来回不重复的两条路就是要求从起点到终点至少有两条不重复的路径,最大流大于等于2即可
**/#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;struct edge{int to,cap,rev;};
const int INF=10000000000,max_v=1110;vector<edge> G[max_v];
int level[max_v];
int iter[max_v];void add_edge(int from,int to,int cap)
{G[from].push_back((edge){to,cap,G[to].size()});G[to].push_back((edge){from,0,G[from].size()-1});
}void bfs(int s)
{memset(level,-1,sizeof(level));queue<int> que;level[s]=0;que.push(s);while(!que.empty()){int v=que.front();que.pop();for(int i=0;i<G[v].size();i++){edge& e=G[v][i];if(e.cap>0 && level[e.to]<0){level[e.to]=level[v]+1;que.push(e.to);}}}
}int dfs(int v,int t,int f)
{if(v==t) return f;for(int &i = iter[v];i<G[v].size();i++){edge &e=G[v][i];if(e.cap>0 && level[v]<level[e.to]){int d=dfs(e.to,t,min(f,e.cap));if(d>0){e.cap-=d;G[e.to][e.rev].cap+=d;return d;}}}return 0;
}int max_flow(int s,int t)
{int flow=0;for(;;){bfs(s);if(level[t]<0) return flow;memset(iter,0,sizeof(iter));int f;while((f=dfs(s,t,INF))>0){flow+=f;}}return flow;
}struct node
{double rate;int x,y,r;
}s[305];int main()
{int n,i,ss,tt,j,T;scanf("%d",&T);while(T--){scanf("%d",&n);for(i=0;i<700;i++) G[i].clear();for(i=0;i<n;i++){scanf("%lf%d%d%d",&s[i].rate,&s[i].x,&s[i].y,&s[i].r);if(s[i].rate==400) ss=i;else if(s[i].rate==789) tt=i;}bool f=false;for(i=0;i<n;i++)for(j=0;j<n;j++){if(s[j].rate-s[i].rate>0.0001){int dis=(s[i].x-s[j].x)*(s[i].x-s[j].x)+(s[i].y-s[j].y)*(s[i].y-s[j].y);if(dis<=(s[i].r+s[j].r)*(s[i].r+s[j].r)){add_edge(i,j,1);if(s[i].rate==400 && s[j].rate==789) f=true;}}}if(max_flow(ss,tt)>=2) f=true;if(f) printf("Game is VALID\n");else printf("Game is NOT VALID\n");}return 0;
}
最大流 hdu 4183相关推荐
- HDU 4183 Pahom on Water 来回走不重复点的网络流
题目来源:HDU 4183 Pahom on Water 题意:若干个区域 每个区域有一个值 区域是圆 给出圆心和半径 从起点(值为400.0)到终点(值为789.0)满足走相交的圆 并且值必须递增 ...
- HDU 4183(max flow)
HDU 4183(max flow) 链接 题意:orz,论翻译的重要性,看了半天.进入正题: 有n(2 <= n <= 300)个圆圈,每个圆圈都有其频率f,坐标(x,y),半径r.(题 ...
- HDU 4183 Pahom on Wate【网络流+路径问题】
HDU 4183 Pahom on Water: 题意: 有n(2≤n≤300)个点,每个点有个频率f(400.0≤f≤789.0)和二维坐标还有半径.如果点i能走到点j,那么以两个点为圆心半径分别为 ...
- hdu 4183 Pahom on Water 最大流
一个平面上有n个圆, 每个圆都有一个频率, 有两个频率为400和789的圆, 问是否能从频率为400的圆走到频率为789的圆, 并从频率为789的圆走回频率为400的圆, 并且除了频率为400的圆, ...
- HDU -- 4183 Pahom on Water(最大流)
题目大意: 二维空间上有一些点,每个点有一个频率,圆心坐标,半径,设s点是频率最低的点,t是频率最高的点,要求从s点走到t点,在从点t回到点s.当从s走到t时,要求两个点表示的园相交并且第一个点的频率 ...
- 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和 ...
- hdu 4183 Pahom on Water 网络流
题意 二维空间上有一些点,每个点有一个半径r和频率f,要从某一个点S走到另一个点T,然后再从T回到S.从S到T时,如果两个点表示的圆相交并且第一个点小于第二个点的频率的,那么能从第一个点到第二个点 ...
- 【网络流】 HDU 4183 Pahom on Water 拆点
题意:求两条路 能从 400.0 -> 789.0 且这两条路不想交(除了端点400,789 ) 求只能走一次的网络流需要用到拆点, 将点i 拆成 i 和 i+n i->i+n的容量为 ...
- 网络流--最大流--HDU 3549 Flow Problem
题目链接 Problem Description Network flow is a well-known difficult problem for ACMers. Given a graph, y ...
最新文章
- R语言:计算各种距离
- Shell之系统函数和自定义函数
- Flask - app的配置和实例化Flask的参数
- java jpeg压缩解码_图片压缩(iOS)
- java基础之lambda表达式
- System Center Technical Preview DPM(2016)对Exchange2016的灾难恢复
- MySQL中distinct和group by性能比较
- 基于机器视觉的洋葱霜霉病症状自动检测
- Windows Server 8 让人有点茫然
- AngularJs + angular-ui-router + bootstrap 实现blog基础导航功能
- PWM DAC vs. Standalone
- 4.ES 相关插件安装
- 移动脱机 Outlook 数据文件 (.ost)
- mysql select_type
- Jquery项目练习-狂拍灰太狼
- android x86 兼容问题,X86如何解决Android应用兼容性问题
- 域名ICP备案查询API接口,免费好用
- Java中submit的方法,线程池中 submit()和 execute()方法区别
- python终端会话是指什么_进程组、会话、控制终端的概念及程序
- 2020 3 PLC PON