博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ】【3504】【CQOI2014】危桥
阅读量:4573 次
发布时间:2019-06-08

本文共 2544 字,大约阅读时间需要 8 分钟。

网络流/最大流


  比较裸的最大流= =

  无向图上走来回其实就等价与走两遍>_>

  如果路径有相交其实不影响答案的

  比较恶心的是两个人路过同一座桥,但走的方向不同互相抵消流量了……

  其实只要在第一遍跑网络流以后如果为Yes,就将其中一人的起点终点交换,再跑一遍就可以了

 

UPD:其实N=55就可以了,不需要像我代码里那样开到3000……因为只有n个点= =不是$n^2$的

1 /**************************************************************  2     Problem: 3504  3     User: Tunix  4     Language: C++  5     Result: Accepted  6     Time:44 ms  7     Memory:2500 kb  8 ****************************************************************/  9   10 //BZOJ 3504 11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 #define rep(i,n) for(int i=0;i
=n;--i) 20 #define pb push_back 21 using namespace std; 22 inline int getint(){ 23 int v=0,sign=1; char ch=getchar(); 24 while(ch<'0'||ch>'9'){ if (ch=='-') sign=-1; ch=getchar();} 25 while(ch>='0'&&ch<='9'){ v=v*10+ch-'0'; ch=getchar();} 26 return v*sign; 27 } 28 const int N=3010,M=1e5+10,INF=~0u>>2; 29 typedef long long LL; 30 /******************tamplate*********************/ 31 int n,m,tot,ans,a1,a2,an,b1,b2,bn; 32 char mp[55][55]; 33 struct edge{ int to,v;}; 34 struct Net{ 35 edge E[M]; 36 int head[N],next[M],cnt; 37 void ins(int x,int y,int v){ 38 E[++cnt]=(edge){y,v}; 39 next[cnt]=head[x]; head[x]=cnt; 40 } 41 void add(int x,int y,int v){ 42 ins(x,y,v); ins(y,x,0); 43 } 44 int s,t,cur[N],d[N],Q[N]; 45 bool mklevel(){ 46 memset(d,-1,sizeof d); 47 d[s]=0; 48 int l=0,r=-1; 49 Q[++r]=s; 50 while(l<=r){ 51 int x=Q[l++]; 52 for(int i=head[x];i;i=next[i]) 53 if (d[E[i].to]==-1 && E[i].v){ 54 d[E[i].to]=d[x]+1; 55 Q[++r]=E[i].to; 56 } 57 } 58 return d[t]!=-1; 59 } 60 int dfs(int x,int a){ 61 if (x==t) return a; 62 int flow=0; 63 for(int &i=cur[x];i && flow
View Code

3504: [Cqoi2014]危桥

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 588  Solved: 313
[][][]

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

4 0 1 1 2 3 1
XOXX
OXOX
XOXO
XXOX
4 0 2 1 1 3 2
XNXO
NXOX
XOXO
OXOX

Sample Output

Yes
No
数据范围
4<=N<50
O<=a1, a2, b1, b2<=N-1
1 <=an. b<=50

HINT

Source

[ ][ ][ ]

转载于:https://www.cnblogs.com/Tunix/p/4421099.html

你可能感兴趣的文章
Asp.Net webconfig中使用configSections的用法
查看>>
mysql 二进制日志
查看>>
阻止putty变成inactive
查看>>
TP框架代码学习 学习记录 3.2.3
查看>>
doc文档生成带目录的pdf文件方法
查看>>
js数组,在遍历中删除元素(用 for (var i in arr)是无效的 )
查看>>
通过前端上传图片等文件的方法
查看>>
在 OC 中调用 Swift 代码
查看>>
Android仿腾讯应用宝 应用市场,下载界面, 有了进展button
查看>>
安卓|五大逆向软件下载
查看>>
5 OK6410裸机调试(不用Jlink)
查看>>
“模板”学习笔记(5)-----编译器在处理函数模板的时候都干了啥
查看>>
教你用shell写CGI程序
查看>>
窗口 对话框 Pop Dialog 示例
查看>>
ubuntu(centos) server安装vmware tools
查看>>
数据结构之最大不重复串
查看>>
为什么要配置sdk-tools/platform-toools?
查看>>
自己动手开发更好用的markdown编辑器-07(扩展语法)
查看>>
maven dependency:tree中反斜杠的含义
查看>>
队列的循环队列
查看>>