bzoj3504: [Cqoi2014]危桥 网络流
一种网络流建图的思路吧,改天最好整理一波网络流建图思路
#include <bits/stdc++.h>
using namespace std;
int n,h,t,a1,a2,an,b1,b2,bn,flow,now;char ch;
int dis[],l[],d[][];char c[][];
char getch()
{
for(ch=getchar();ch!='O' && ch!='N' && ch!='X';ch=getchar());
return ch;
}
bool bfs()
{
for(int i=;i<=n+;i++)
dis[i]=;
for(h=,t=,l[]=,dis[]=;h<=t;h++)
for(int i=;i<=n+;i++)
if(d[l[h]][i] && !dis[i])
l[++t]=i,dis[i]=dis[l[h]]+;
return dis[n+];
}
int dfs(int now,int maxflow)
{
if(now==n+) return maxflow;
int flow=;
for(int i=;i<=n+;i++)
if(dis[i]==dis[now]+ && d[now][i])
{
int thi=dfs(i,min(maxflow,d[now][i]));
d[now][i]-=thi;d[i][now]+=thi;
maxflow-=thi;flow+=thi;
if(maxflow==) return flow;
}
if(flow==)
dis[now]=-;
return flow;
}
void INIT()
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
switch(c[i][j])
{
case'O':d[j][i]=d[i][j]=;break;
case'N':d[j][i]=d[i][j]=flow;break;
case'X':d[j][i]=d[i][j]=;break;
}
for(int i=;i<=n+;i++)
d[][i]=d[i][]=d[i][n+]=d[n+][i]=;
d[a1][]=d[][a1]=an<<;d[b1][]=d[][b1]=bn<<;
d[a2][n+]=d[n+][a2]=an<<;d[b2][n+]=d[n+][b2]=bn<<;
now=;
}
int main()
{
while(~scanf("%d%d%d%d%d%d%d",&n,&a1,&a2,&an,&b1,&b2,&bn))
{
a1++;a2++;b1++;b2++;
flow=an+bn<<;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
c[i][j]=getch();
INIT();
while(now<flow && bfs()) now=now+dfs(,flow);
if(now<flow)
{
puts("No");
continue;
}
swap(b1,b2);
INIT();
while(now<flow && bfs()) now=now+dfs(,flow);
if(now<flow)
puts("No");
else
puts("Yes");
}
return ;
}
bzoj3504: [Cqoi2014]危桥 网络流的更多相关文章
- Luogu3163 [CQOI2014]危桥 ---- 网络流 及 一个细节的解释
Luogu3163 [CQOI2014]危桥 题意 有$n$个点和$m$条边,有些边可以无限次数的走,有些边这辈子只能走两次,给定两个起点和终点$a_1 --> a_2$(起点 --> 终 ...
- BZOJ3504 CQOI2014危桥(最大流)
如果只有一个人的话很容易想到最大流,正常桥连限流inf双向边,危桥连限流2双向边即可.现在有两个人,容易想到给两起点建超源两汇点建超汇,但这样没法保证两个人各自到达自己要去的目的地.于是再超源连一个人 ...
- bzoj3504: [Cqoi2014]危桥
题意:给出一个图,有的边可以无限走,有的只能走两次(从一头到另一头为一次),给定两个起点以及对应的终点以及对应要走几个来回,求判断是否能完成. 先来一个NAIVE的建图:直接限制边建为容量1,无限制为 ...
- bzoj3504: [Cqoi2014]危桥--最大流
题目大意:给张无向图,有两个人a,b分别从各自的起点走向各自的终点,走A,B个来回,图里有些边只能走两次,求问是否能满足a,b的需求 按照题目给的表建图 S连a1,b1 a2,b2连T 跑最大流看是否 ...
- [BZOJ3504][CQOI2014]危桥(最大流)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3504 分析:很容易想到最大流,但如果S-a1,S-b1,a2-T,b2-T这样跑S-T最大流判 ...
- 【BZOJ3504】危桥(网络流)
[BZOJ3504]危桥(网络流) 题面 BZOJ 洛谷 Description Alice和Bob居住在一个由N座岛屿组成的国家,岛屿被编号为0到N-1.某些岛屿之间有桥相连,桥上的道路是双 向的, ...
- BZOJ 3504: [Cqoi2014]危桥 [最大流]
3504: [Cqoi2014]危桥 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1407 Solved: 703[Submit][Status] ...
- 3504: [Cqoi2014]危桥
3504: [Cqoi2014]危桥 链接 分析: 首先往返的可以转化为全是“往”,那么只要将容量除以2即可. 然后S向a1连边容量为an(除以2之前为2*an),S向a2连边容量为an,b1,b2向 ...
- bzoj千题计划137:bzoj [CQOI2014]危桥
http://www.lydsy.com/JudgeOnline/problem.php?id=3504 往返n遍,即单向2*n遍 危桥流量为2,普通桥流量为inf 原图跑一遍最大流 交换b1,b2再 ...
随机推荐
- Mac OSX操作系统安装和配置Zend Server 6教程(4)
在前三节中,完成了安装和配置,最后是登录后台,并设置权限.Zend server后台登录默认端口是10081.浏览器中的的地址应输入http://localhost:10081/ZendServer. ...
- iOS:由URL成员UIImage
很多时候,我们只能得到URL.然后,需要建立一个UIImage. 在正常情况下,.我们一般通过SDWebImage直接施工UIImageVIew的image,如何使用URL直接施工UIImage它? ...
- 3DMax的OFusion插件的使用问题
使用OFusion将3D max导出到现场Ogre的Mesh该方法是经常使用的非.的一些问题,在这里为方便摘要. 1.OFusion得到: http://download.csdn.net/detai ...
- [转]JSON and Microsoft Technologies(翻译)
本文翻译CodeProject(链接)上的一篇文章,文章对JSON的概念以及它在微软一些技术中的应用起到了非常好的扫盲作用,总结得非常好,适合初学者. 目录 介绍 什么是JavaScript对象? 实 ...
- [转]C# and the using Statement in 3 seconds and a bug in Reflector
Using() Statement in 3 seconds and a bug in Reflector The boring, known accross the board definition ...
- 关于如何惟一地标识一台Android设备的综合性讨论
想必大家在开发Android项目的时候,多多少少会遇到“如何惟一地标识一台Android设备”等类似的问题.不只是以前,即使是现在乃至可以预见的将来,这个问题都将一直存在. 如果大家使用搜索工具搜索的 ...
- Roslyn 编译平台概述
在Language Feature Status上面看到,其实更新的并不是特别多,为了不会误导看了C# 6.0 功能预览 (一)的园友,现在把官方的更新列表拿了过来,供大家参考 C# 6.0 功能预览 ...
- java编程思想笔记(第一章)
Alan Kay 第一个定义了面向对象的语言 1.万物皆对象 2.程序是对象的集合,他们彼此通过发送消息来调用对方. 3.每个对象都拥有由其他对象所构成的存储 4.每个对象都拥有其类型(TYpe) 5 ...
- DropDownListFor的用法
Asp.Net MVC中DropDownListFor的用法 在Asp.Net MVC中可以用DropDownListFor的方式来让用户选择已定列表中的一个数值.用法不复杂,这里简单做一个记录. ...
- jsonp跨域+ashx
jsonp跨域+ashx(示例) 前言 做B/S项目的时候,我们一般使用jquery+ashx来实现异步的一些操作,比如后台获取一些数据到前台,但是如果ashx文件不在本项目下,引用的是别的域下的文件 ...