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再 ...
随机推荐
- 大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 聚类分析算法)
原文:(原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 聚类分析算法) 本篇文章主要是继续上一篇Microsoft决策树分析算法后,采用另外一种分析算法对目标顾客群体的挖掘 ...
- SQLite数据库查看工具(免费)
1. SQLite Administrator http://sqliteadmin.orbmu2k.de/ iteSpy 2. SQLiteSpy http://www.yunqa.de/de ...
- C#的StringBuilder 以及string字符串拼接的效率对照
今天公司一个做Unity3d的人在说字符串拼接的一个效率问题,他觉得string拼接会产生新的一个内存空间,假设不及时回收会产生大量的碎片,特别是在Unity3d这样一个Updata环境下,由于每一帧 ...
- wpf的datagrid和winform的datagridview刷新
DataGrid的数据源的加载需要大量IO操作,不可能等数据全部读取之后才显示到UI上.由于对WPF数据绑定不很熟悉,对ObserveCollection等内容没有太多时间去研究,只能用一些取巧的办法 ...
- android中怎么调整字体的间距和行间距
在网页中都是很轻松的就可以调整间距的.在android中,我个人并没有去设置过. 下面就来说说android中的间距问题. 原文:http://blog.csdn.net/fancylovejava/ ...
- php+ajax+json
来个例子:(json.html) <html lang="en"> <head> <meta charset="UTF-8"> ...
- 【Oracle】-【插入读取顺序】-插入读取之间的顺序关系
Oracle插入记录的顺序是否是读取的顺序? 通过一个简单的实验验证: SQL> create table t ( x int, a char(2000) default 'x', b char ...
- .NET面试问答集锦
程序员级别鉴定书(.NET面试问答集锦) 提供避免元素命名冲突的方法 DOM适合的使用场景是什么?是否有尺寸限制? DOM是一种与浏览器,平台,语言无关的接口,使你可以访问页面其他的标准组件. DOM ...
- Design Thinking BrainWalk
Design Thinking Design Thinking Workshop @ Agile Tour 2013 Shanghai 摘要: 设计思维工作坊上周日在2013年敏捷之旅上海站,引导 ...
- CLR_Via_C#学习笔记之枚举
CLR_Via_C#学习笔记之枚举 枚举类型(Enum)定义的一组"符号名称/值"配对:因为枚举类型使用程序更容易编写.阅读和维护,而且它是强类型: 枚举是值类型:由System. ...