BZOJ 3504: [Cqoi2014]危桥 [最大流]
3504: [Cqoi2014]危桥
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 1407 Solved: 703
[Submit][Status][Discuss]
Description
Alice和Bob居住在一个由N座岛屿组成的国家,岛屿被编号为0到N-1。某些岛屿之间有桥相连,桥上的道路是双
向的,但一次只能供一人通行。其中一些桥由于年久失修成为危桥,最多只能通行两次。Alice希望在岛屿al和a2之间往返an次(从al到a2再从a2到al算一次往返)。同时,Bob希望在岛屿bl和b2之间往返bn次。这个过程中,所有危桥最多通行两次,其余的桥可以无限次通行。请问Alice和Bob能完成他们的愿望吗?
Input
本题有多组测试数据。
每组数据第一行包含7个空格隔开的整数,分别为N、al、a2、an、bl、b2、bn。
接下来是一个N行N列的对称矩阵,由大写字母组成。矩阵的i行j列描述编号i一1和j-l的岛屿间的连接情况,若为“O”则表示有危桥相连:为“N”表示有普通的桥相连:为“X”表示没有桥相连。
|
Output
对于每组测试数据输出一行,如果他们都能完成愿望输出“Yes”,否则输出“No”。
Sample Input
XOXX
OXOX
XOXO
XXOX
4 0 2 1 1 3 2
XNXO
NXOX
XOXO
OXOX
Sample Output
No
数据范围
4<=N<50
O<=a1, a2, b1, b2<=N-1
1 <=an. b<=50
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int N=55,INF=1e9; inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}return x*f; } int n,a1,a2,an,b1,b2,bn,s,t; int g[N][N]; int tot; char ss[N]; struct edge{int v,ne,c,f; }e[N*N<<1]; int cnt,h[N]; inline void ins(int u,int v,int c){cnt++;e[cnt].v=v;e[cnt].c=c;e[cnt].f=0;e[cnt].ne=h[u];h[u]=cnt;cnt++;e[cnt].v=u;e[cnt].c=c;e[cnt].f=0;e[cnt].ne=h[v];h[v]=cnt; } int q[N],head,tail,vis[N],d[N]; bool bfs(){memset(vis,0,sizeof(vis));memset(d,0,sizeof(d));head=tail=1;q[tail++]=s;d[s]=0;vis[s]=1;while(head!=tail){int u=q[head++];for(int i=h[u];i;i=e[i].ne){int v=e[i].v;if(!vis[v]&&e[i].c>e[i].f){vis[v]=1;d[v]=d[u]+1;if(v==t) return true;q[tail++]=v;}}}return false; }int cur[N]; int dfs(int u,int a){if(u==t||a==0) return a;int flow=0,f;for(int &i=cur[u];i;i=e[i].ne){int v=e[i].v;if(d[v]==d[u]+1&&(f=dfs(v,min(a,e[i].c-e[i].f)))>0){flow+=f;e[i].f+=f;e[((i-1)^1)+1].f-=f;a-=f;if(a==0) break;}}return flow; } int dinic(){int flow=0;while(bfs()){for(int i=s;i<=t;i++) cur[i]=h[i];flow+=dfs(s,INF);}return flow; } int th[N],tc; bool solve(){s=0;t=n+1;ins(s,a1,an);ins(s,b1,bn);ins(a2,t,an);ins(b2,t,bn);int ans=dinic();//printf("ans1 %d\n",ans);if(ans!=an+bn) return false;cnt=0;memset(h,0,sizeof(h));for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++) if(g[i][j]) ins(i,j,g[i][j]);ins(s,a1,an);ins(s,b2,bn);ins(a2,t,an);ins(b1,t,bn);ans=dinic();//printf("ans2 %d\n",ans);if(ans!=an+bn) return false;return true; } int main(){//freopen("in.txt","r",stdin);while(scanf("%d",&n)!=EOF){a1=read()+1;a2=read()+1;an=read()*2;b1=read()+1;b2=read()+1;bn=read()*2;cnt=0;memset(h,0,sizeof(h));for(int i=1;i<=n;i++){scanf("%s",ss+1);for(int j=i+1;j<=n;j++){if(ss[j]=='O') ins(i,j,2),g[i][j]=2;else if(ss[j]=='N') ins(i,j,INF),g[i][j]=INF;else g[i][j]=0;}}if(solve()) puts("Yes");else puts("No");} }
转载于:https://www.cnblogs.com/candy99/p/6241419.html
BZOJ 3504: [Cqoi2014]危桥 [最大流]相关推荐
- bzoj 3504: [Cqoi2014]危桥(最大流)
3504: [Cqoi2014]危桥 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1660 Solved: 823 [Submit][Statu ...
- [CQOI2014]危桥
[CQOI2014]危桥 有点神仙的最大流 在Ta的博客查看 就是这样做,(F1+F2)/2后对应a的走法,(F1-F2)/2后对应b的走法 可以拼凑出合法的增广路,并且两者不会相交(整体除以2容量认 ...
- P3163 [CQOI2014]危桥
传送门 我是看不出这玩意儿和网络流有什么关系-- 我们把图中的所有边都当成无向边加入图中,容量为\(inf\) 危桥的容量为\(2\) 从源点到\(a1,b1\)连边容量为\(an*2\),\(a2, ...
- JZOJ 3597. 【CQOI2014】危桥
Description Alice和Bob居住在一个由N座岛屿组成的国家,岛屿被编号为0到N-1.某些岛屿之间有桥相连,桥上的道路是双向的,但一次只能供一人通行.其中一些桥由于年久失修成为危桥,最多只 ...
- BZOJ 5326 [JSOI2017]博弈 (模拟费用流、线段树)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=5326 题解 终于成为第8个A掉这题的人--orz tzw神仙早我6小时 本以为这东西常数 ...
- BZOJ 4946: [Noi2017]蔬菜 模拟费用流
title BZOJ 4946 LUOGU 3826 简化题意: 定义了一种蔬菜为:\(ai,si,ci,xi\),意思是蔬菜的价格为 \(a_i\),第一份卖出时价格为 \(a_i+s_i\),一共 ...
- [BZOJ 2424][HAOI2010]订货(费用流)
Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为 ...
- bzoj 3503: [Cqoi2014]和谐矩阵(高斯消元)
3503: [Cqoi2014]和谐矩阵 Time Limit: 10 Sec Memory Limit: 128 MBSec Special Judge Submit: 1101 Solved ...
- bzoj 1066: [SCOI2007]蜥蜴(最大流)
1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 4116 Solved: 2081 [Submit][Statu ...
最新文章
- mysql char 和varchar哪种效率高_MySQL数据库中的字段类型varchar和char的主要区别是什么?那种字段的查找效率要高,为什么?...
- matlab二维画图函数汇总--论文,数学建模中使用
- mysql数据库连接过多的错误,可能的原因分析及解决办法
- Access数据库出现的0x80004005 Unspecified error问题
- python3的3D开发-基于blender(1)
- [Leetcode][JAVA][第1111题][栈思想]
- 静物摄影用光技巧_摄影技巧:摄影如何用光?摄影大师总结的10点,非常受用!...
- J2EE实现发送邮件功能
- 判断整除(动态规划,递推)
- MAC安装linux双系统
- idea运行前端项目
- CentOS安装锐捷认证客户端
- android 年月日倒计时,手机日期倒计时
- matlab函数的线性化,[原创]非线性Simulink模型线性化方法讨论
- 用IO流读取trs文件
- 在微软官方网站”满速”下载Windows10最新系统镜像方法。
- 《黑客帝国 THE MATRIX》——当你生活在代码的虚拟世界中
- 分享一下我做教程用的GIF动态图制作小工具screentogif
- java学习总结(16.06.07)类的静态成员和非静态成员
- [枚举] COGS 1580 [WC2005]友好的生物