pat顶级1003 Universal Travel Sites (35 point(s))
欢迎访问我的pat顶级题解目录哦 https://blog.csdn.net/richenyunqi/article/details/86751676
题目描述
算法设计
这道题是图论的最大流问题,关于该问题的解决算法有很多,比较容易掌握的是Edmonds-Karp算法。关于该问题和Edmonds-Karp算法展开起来比较复杂,读者可自行查阅相关资料。我在本博客中直接附上解决本题的代码,代码参考了刘汝佳的《算法竞赛与入门经典(第2版)》关于Edmonds-Karp算法的实现,其中添加了足够充分的注释,读者也可以参考我的代码进行理解。
注意点
图中边的描述最多有500行,最多有1000个点,所以相关数组至少要开到1000
C++代码
#include<bits/stdc++.h>
using namespace std;
struct Edge{//边类int from,to,cap,flow;Edge(int f,int t,int c,int fl):from(f),to(t),cap(c),flow(fl) {}
};
unordered_map<string,int>trans;//将字符串转换为数字,由0开始编号
vector<Edge>edges;//储存边
vector<int>graph[1005];//整个图,其中graph[i][j]表示结点i的第j条边在edges数组中的序号
int a[1005],p[1005];//a数组表示源点到结点a[i]的残量,p数组表示最短路树上到达结点p[i]的边在edges数组中的序号
void insertEdge(string&from,string&to,int cap){//插入边,起点为from,终点是to,容量为capif(trans.find(from)==trans.end())//将起点转换为数字编号trans.insert({from,trans.size()});if(trans.find(to)==trans.end())//将终点转换为数字编号trans.insert({to,trans.size()});int f=trans[from],t=trans[to];//获取起点、终点的数字编号graph[f].push_back(edges.size());//在图中插入该边edges.push_back(Edge(f,t,cap,0));graph[t].push_back(edges.size());//在图中插入该边的反向边edges.push_back(Edge(t,f,0,0));
}
int MaxFlow(int s,int t){//最大流算法,s为源点,t为汇点int flow=0;//最大流量while(true){memset(a,0,sizeof(a));//将源点到达每个结点的残量初始化为0//广度优先遍历查找从源点到达汇点的增广路queue<int>q;q.push(s);a[s]=INT_MAX;//起点的残量置为无穷大while(!q.empty()){int x=q.front();q.pop();for(int i:graph[x]){//遍历以x为起点的边Edge&e=edges[i];if(a[e.to]==0&&e.cap>e.flow){//当前边的终点的残量为0且容量大于流量p[e.to]=i;//更新到达该终点的边的编号a[e.to]=min(a[x],e.cap-e.flow);//更新源点到该终点的残量q.push(e.to);//压入队列}}if(a[t]!=0)//终点的残量不为零,跳出循环break;}if(a[t]==0)//终点的残量为零,表示不存在增广路了,跳出外层死循环break;for(int u=t;u!=s;u=edges[p[u]].from){//从汇点向前遍历增广路经,更新每条增广路的流量edges[p[u]].flow+=a[t];edges[p[u]^1].flow-=a[t];}flow+=a[t];//增加最大流量}return flow;
}
int main(){string from,to;int n,cap;cin>>from>>to>>n;trans[from]=0;trans[to]=1;while(n--){cin>>from>>to>>cap;insertEdge(from,to,cap);}printf("%d",MaxFlow(0,1));return 0;
}
pat顶级1003 Universal Travel Sites (35 point(s))相关推荐
- PAT顶级 1003 Universal Travel Sites (35分)(最大流)
题目链接: 1003 Universal Travel Sites (35分) 思路: 题目问stationstationstation的最小容量,变相就是问最多能一次性出发多少人,使得过程中不会超过 ...
- 1003 Universal Travel Sites (35 分)(C++)
PAT顶级题解目录 After finishing her tour around the Earth, CYLL is now planning a universal travel ...
- 1003. Universal Travel Sites (35)
本题是PAT上顶级一道题目,考察的知识点其实只有一个,最大流问题.用基于广度优先搜索的Edmonds-Karp算法求解.题目意思就是说求解最多能从地球站发送出去的最大人数,在到达目的星球(MAR)上途 ...
- 1003. Universal Travel Sites (35)解题报告
思路 这道题实际上是在问图算法中的最大流问题,使用Edmonds-Karp算法就可以解决. 它的时间复杂度是O(VE^2).具体的算法和证明请参考<算法导论>第六部分图算法第26章最大流. ...
- PAT-Top-1003 Universal Travel Sites (35分)网络流最大流
1003 Universal Travel Sites (35分) 题目传送门:1003 Universal Travel Sites (35分) 一.题目大意 二.解题思路 网络流问题,第一次尝试, ...
- PAT顶级 1016 Uniqueness of MST (35分)(判断最小生成树是否唯一)
添加链接描述 Given any weighted undirected graph, there exists at least one minimum spanning tree (MST) if ...
- pat顶级1022 Werewolf (35 point(s))
欢迎访问我的pat顶级题解目录哦 https://blog.csdn.net/richenyunqi/article/details/86751676 题目描述 算法设计 这道题是pat甲级1148 ...
- pat顶级1004 To Buy or Not to Buy - Hard Version (35 point(s))
欢迎访问我的pat顶级题解目录哦 https://blog.csdn.net/richenyunqi/article/details/86751676 题目描述 算法设计 这道题没什么好办法,只能进行 ...
- PAT学习资料汇总(PAT甲级、PAT顶级、PAT考试经验)
二.PAT甲级 PAT甲级真题目录(按题型整理) PAT甲级真题目录(按题型整理)_love music.的博客-CSDN博客_pat甲级真题 PAT甲[所有题目+解析+代码示例+总结]附带所有历年整 ...
最新文章
- 周志华:“数据、算法、算力”人工智能三要素,在未来要加上“知识”| CCF-GAIR 2020...
- 在text html模版中写js,如何利用模板将HTML从JavaScript中抽离
- ip sensor芯片级解决方案
- python科学计算笔记(三)pandas中Series和DataFrame练习
- 电子数字 网易游戏在线笔试 第一题 hihocoder
- 网管日志-06.08.16
- 连续时间系统的s域分析(Matlab)
- java 多线程(生产者消费者)
- readResolve()原理
- 华佳慧科技:OSN500设备ERPS相切环组网介绍
- java char表示范围_char取值范围
- 浏览器点击链接总是跳转到百度首页界面
- Sort of sort
- setup factory打包工具的使用
- C#基于 iTextSharp.text.pdf 实现PDF水印添加功能
- android 设置布局宽度,Android布局宽度为50%
- Spring定时任务注解说明
- Linux.配置Hadoop环境的一些问题解决
- 【学习笔记】斯坦福SCI写作课 Unit 1
- 联想卡在logo界面_联想电脑卡在logo界面 联想电脑卡在载入界面怎么办
热门文章
- 逻辑学和计算机科学,数学、逻辑与计算机科学的关系
- 量子力学多世界解释:这个世界的你是穷光蛋 另一个世界是亿万富翁(文中有赠书活动)...
- 蓝桥杯单片机比赛学习:5、中断系统之外部中断的基本原理
- /Users/ng/Library/Developer/CoreSimulator/Devices/9B82D44F-703C-481E-BA28-71892DEA823D/data/Containe
- DG部署(主库rac)--rman 异机恢复方式
- [Layui]主页tab选项卡操作(刷新页面,刷新选项卡,关闭,关闭其他,全部关闭)
- python可视化水平双向箭头_科学网—Python matplotlib quiver—画箭头、风场、量场图 - 张伟的博文...
- 编程已正式列入高考!孩子的未来, 不仅仅与语数英有关!
- Spring构造器的三种注入方式
- 芝加哥大学计算机语言学,芝加哥大学cs专业值得申请么?