![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛-第十一章
文章平均质量分 75
JeraKrs
本人目前就职于百度商业研发部,有需要内推的朋友简历可发我邮箱 jerakrs@qq.com
展开
-
uva 10397 - Connect the Campus(最小生成树&并查集)
题目链接:10397 - Connect the Campus题目大意:给出n,然后再给出n个点的坐标,要连接着n个坐标,使得总距离最小,但是有m对点已经连接,输入m,和m组a和b表示a和b两点已经连接。解题思路:kruskal算法,每次将最短的边拿出来考虑,判断该边的两个端点是否联通,如果未联通,则加入改变;否则跳过。#include #include原创 2013-10-12 15:33:32 · 1579 阅读 · 0 评论 -
uva 10594 - Data Flow(费用流)
题目链接:uva 10594 - Data Flow题目大意:给出一张图,然后给出K和D,D表示每条路的容量,然后由点1到点n运送数据,流量为K时的最小费用。解题思路:和uva 10806 - Dijkstra, Dijkstra.做法一个样.....表示说不解释,就在起点0和1之间加条容量为K的路就好。#include #include #incl原创 2013-11-23 16:29:26 · 2007 阅读 · 0 评论 -
uva 11045 - My T-shirt suits me(dfs)
题目链接:11045 - My T-shirt suits me题目大意:给出n和m,表示有n件衣服,然后有m个人,每个人可以穿两种型号的衣服,总共有六种型号的衣服,各n / 6件, 问说是否可以让每个人都有可以穿的衣服。解题思路:这题貌似是二分图匹配,但因为m不大,所以直接暴力做了,枚举人,两种选择。#include #include const int原创 2013-11-22 14:19:11 · 1771 阅读 · 0 评论 -
uva 563 - Crimewave(网络流最大流)
题目链接:uva 563 - Crimewave题目大意:在一个r*c的城市中,有n个银行,有一个抢匪想抢劫这n家银行,每次抢劫后需逃离城市(移动到坐标外),但是又不能走先前走过的位置,给出n个银行的坐标,问说抢匪能非成功抢劫银行并且逃脱。解题思路:很经典的逃脱问题,要不是因为在刷网络流的专题根本想不到要用网络流去做。首先先讲每个点与它周围的4个点建立一条边,表示可以移原创 2013-11-22 14:48:13 · 1646 阅读 · 0 评论 -
uva 10746 - Crime Wave - The Sequel(费用流)
题目链接:uva 10746 - Crime Wave - The Sequel题目大意:自从银行被抢之后,警局为每个银行都安排了一个警察,现在有n个银行和m警察,给出每个警察到达各个银行的时间,问说怎么样安排人手,可以使的警察到达银行的平均时间最小。解题思路:网络流的最小费用最大流,起点s与m个警察相连,容量为1,费用为0;n个银行与汇点t相连,容量为1,费用为0;然后就原创 2013-11-22 20:55:12 · 2013 阅读 · 0 评论 -
uva 10806 - Dijkstra, Dijkstra.(费用流)
题目链接:uva 10806 - Dijkstra, Dijkstra.题目大意:给出一个无向图,求出从1走到n,再从n走回1得最短路径,每条边只能走一次。解题思路:无向图的费用流,建立起点s指向1,容量为2,费用为0,建立汇点n + 1,n指向汇点,容量为2,费用为0.然后对于每无向边,差分成两条有向边。然后就是费用流问题,若最大流为2,输出最小费用,否则无法到达。原创 2013-11-23 16:14:38 · 1822 阅读 · 0 评论 -
uva 658 - It's not a Bug, it's a Feature!(优先队列Dijkstra)
题目链接:uva 658 - It's not a Bug, it's a Feature!题目大意:有一个软件,有n个bug, 然后现在有m个补丁,然后m行,分别给出补丁需要的时间,以及原始状态和修复后的状态。对于原始状态,‘-’代表不能有这个bug,‘+’代表必须有这个bug,‘0’表示可有可无;对于修复后的状态,‘-’代表可以修复这个bug,‘+”代表会新增这个bug,’原创 2013-11-24 20:48:51 · 1468 阅读 · 0 评论 -
uva 10269 - Adventure of Super Mario(Floyd + Dijkstra + dp)
题目链接:uva 10269 - Adventure of Super Mario题目大意:马里奥就出桃子之后,要返回自己所居住的村子标号为1,给出A 和 B表示有A个村子和B个城堡,大魔王所居住的城堡A + B,1 ~A为村子,A + 1 ~ B为城堡。现在有m条路,连接着村子、城堡;每条路有它的距离;然后马里奥可以使用k次魔法,可以从一个地方瞬间移动到另外一个地方(不可以在路中间停原创 2013-11-24 16:15:00 · 1805 阅读 · 0 评论 -
uva 10985 - Rings'n'Ropes( 最短路Folyd)
题目连接:uva 10985 - Rings'n'Ropes题目大意:给出n和m,表示有n个戒指和m条绳子,每条绳子的长度为1,给出每根绳子连接的戒指,然在左右手各握住一个戒指,拉直,问说最多有多少个绳子被绷直。解题思路:首先先用Floyd算法将每两个戒指之间的最短距离求出(因为向两端扯的时候,最大距离便是连接两个戒指的最短距离),然后枚举两枚戒指,找出中间所有的点(f[x原创 2013-11-26 20:37:37 · 1452 阅读 · 0 评论 -
uva 515 - King(差分约时系统)
题目链接:uva 515 - King实在不懂什么是差时约分系统,不过大概了解是说建完图之后不能存在负环(既要最短路),如果存在负环的话,两个sum之间就不存在一个稳定的关系。参考题解。#include #include #include #include using namespace std;const int N = 105;const int INF原创 2013-11-26 20:51:48 · 1427 阅读 · 0 评论 -
uva 10330 - Power Transmission(网络流)
uva 10330 - Power Transmission题目大意:最大流问题。解题思路:増广路算法。#include #include #include using namespace std;#define min(a,b) (a)<(b)?(a):(b)const int N = 105;const int INF = 0x3f3f3f原创 2013-11-20 00:02:17 · 3685 阅读 · 0 评论 -
uva 11776 - Oh Your Royal Greediness!(暴力)
题目链接:11776 - Oh Your Royal Greediness!题目大意:有n农民,给出每个农民的工作的起始时间和终止时间。然后每个农民在工作的时候都必须有一个监工,问最少需要几个监工。解题思路:一开始以为是区间选点问题,后来WA了。然后直接暴力就过了。以每个农民的结束时间为标准,若其他人的起始时间小于这个标准,并且终止时间大于这个标准,监工数就要加+1,然后从原创 2014-01-12 18:59:41 · 1593 阅读 · 0 评论 -
uva 753 - A Plug for UNIX(网络流最大流)
题目链接:uva 753 - A Plug for UNIX题目大意:给出n,有n种插座;给出m,表示有m种电器,给出电器名以及插头的类型;给出k,表示有k种转接器,给出可以桥接的插头和插座。 问说最少有多少个电器没有插座用。解题思路:网络流,问题是怎样建图。我的做法是将0做为起点s,与所有的插座建立一条边,容量为1,然后再将所有的电器与终点t建立一条边,容量为1;然后将转原创 2013-11-22 14:30:12 · 3717 阅读 · 4 评论 -
uva 10803 Thunder Mountain(最短路)
题目链接: 10803 - Thunder Mountain题目大意:给出一些点的坐标然后如果这两个点之间的距离大于10的话代表不能够移动,问说里面任意一个点是否可以到达其他的点,如果所有点都联通的话,输出两点之间最长的距离,如果存在不联通的点,输出Send Kurdy。解题思路:Floyd算法的模版题,不解释。。。。。#include #include原创 2013-10-18 15:45:56 · 1529 阅读 · 0 评论 -
uva 125 - Numbering Paths(Warshall求解路径总数)
题目链接:125 - Numbering Paths题目大意:给出一个有向图,然后问说每个点到其他所有点可选的路径有多少条。解题思路:Warshall算法的模板题。#include #include #define max(a,b) (a)>(b)?(a):(b)const int N = 1005;int r, n, g[N][N];void原创 2013-10-16 16:42:29 · 1521 阅读 · 0 评论 -
uva 10369 - Arctic Network(最小生成树)
题目链接:10369 - Arctic Network题目大意:有n个前哨站,现在有两种通信技术去连接哨站,卫星技术和无线电技术,通过卫星技术需要一个卫星信道,现在已知有m个信道,问说连接所有哨站时,通过无线电技术连接的最长距离的最小值。(每个哨站已经设立好了接受装置,卫星通信无需考虑距离)解题思路:最短路问题,无需考虑联通整张图的最小距离,只需要记录下第n - m - 1原创 2013-10-12 15:44:27 · 1615 阅读 · 0 评论 -
uva 10099 - The Tourist Guide(最小生成树)
题目链接:10099 - The Tourist Guide题目大意:有n个旅游景点,以及m条路,给出m条路的信息,包括连接的景点序号,限制人数,然后再给出起始点和终止点,以及总人数,问说需要多少次的运输才能使得所有人到达目的地。解题思路:这题因为以前做过一遍,所以知道有个坑点,就是导游每次必须跟团。我是用kruskal算法去做的,因为题目只要求说运输的次数最少,没有说要求原创 2013-10-12 16:28:20 · 2672 阅读 · 0 评论 -
uva 10048 Audiophobia(最小生成树)
题目链接:10048 - Audiophobia题目大意:有n个城市,和m条街道,每条街道有一个噪音值,q次去问,从城市a到城市b,路径上分贝值的最大值最小为多少。解题思路:与uva 10099的做法是一样的,可以参考一下。#include #include #include using namespace std;const int N = 10原创 2013-10-12 16:59:19 · 1830 阅读 · 0 评论 -
uva 567 Risk(最短路Folyd)
题目链接:567 - Risk题目大意:固定有20个点,然后输入19行的数据,没一行先输入一个n,表示该行还有n个数,然后输入n个数,表示每个数与该行的序号数相同的点有连接,并且权值为1, 在数入m,表示有m次询问,每个询问包含两个数值a,b,输出ab间的最短路径。解题思路:裸的Floyd算法,算法参见《算法竞赛入门经典》P206。#include #in原创 2013-10-12 20:22:55 · 1322 阅读 · 0 评论 -
uva 10986 - Sending email(最短路Dijkstra)
题目连接:10986 - Sending email题目大意:给出n,m,s,t,n表示有n个点,m表示有m条边,然后给出m行数据表示m条边,每条边的数据有连接两点的序号以及该边的权值,问说从点s到点t的最短路径是多少。解题思路:本题应该是无环正权值的一个图,并且本题如果直接用Dijkstra算法去做的话超时,所以一定要用优先队列去进行优化,《算法竞赛入门经典》中介绍了这种原创 2013-10-13 08:58:04 · 2485 阅读 · 0 评论 -
uva 10801 - Lift Hopping(最短路Dijkstra)
题目链接:10801 - Lift Hopping题目大意:有一栋100层的大楼(标号为0~99),里面有n个电梯(不超过5个),以及要到达的层数(aid),然后是每个电梯走一层所需的时间,再n行就是对应每个电梯可以到达的层数,数量不定。然后每装换一次电梯需要等待60秒,问,最快能多快到达目标层数。解题思路:这题有点坑啊,一开始是用邻接表+Dijkstra,可是忘记考虑ai原创 2013-10-13 10:54:53 · 1731 阅读 · 0 评论 -
uva 10034 Freckles(最小生成树Kruskal)
FrecklesIn an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to form a picture of the Liberty Bell. Alas, one of the freckles turns out to be a scar, so原创 2013-07-25 01:37:01 · 1427 阅读 · 0 评论 -
uva 104 - Arbitrage(最短路Floyd)
题目链接:104 - Arbitrage题目大意:现在有n种货币原创 2013-10-13 16:20:27 · 2895 阅读 · 0 评论 -
uva 10608 - Friends(并查集)
题目链接:10608 - Friends题目大意:给出n和m,表示有n个人和m组关系,然后给出m行数据,每行数据含a、b表示a和b为一组的,问最后哪一组人数最多,输出最多的人数。解题思路:可以说是一道裸的并查集,开一个cnt数组用于记录各组的人数,初始值为1,然后每次合并两个组的时候cnt数组也要想加,最后输出最大的cnt[i]就可以了。#include原创 2013-10-15 23:15:02 · 1438 阅读 · 0 评论 -
uva 10158 - War(并查集)
题目链接:10158 - War题目大意:有n个人,若干个命令,每个人分属于不同的国家,并且代表国家与其他代表会谈,这将决定国与国之间的同盟关系,1:a与b结盟 2:a与b决裂(成为敌人) 3:判断a与b是否为同盟(不包括不确定) 4:判断a与b是否为敌人。注意:同盟的同盟是同盟,敌人的敌人是朋友。添加新的关系时与已有的关系冲突的话输出-1。解题思路:开一个2 * n原创 2013-10-15 23:27:23 · 1349 阅读 · 0 评论 -
uva 558 - Wormholes(Bellman Ford判断负环)
题目链接:558 - Wormholes题目大意:给出n和m,表示有n个点,然后给出m条边,然后判断给出的有向图中是否存在负环。解题思路:利用Bellman Ford算法,若进行第n次松弛时,还能更新点的权值,则说明有负环的存在。#include #include #define min(a,b) (a)<(b)?(a):(b)const int N原创 2013-10-16 16:35:44 · 1501 阅读 · 0 评论 -
uva 10273 - Eat or Not to Eat?(暴力枚举)
题目大意:uva 10273 - Eat or Not to Eat?题目大意:在一个农场里有n头牛,每头牛都有一个产奶周期,然后n行就是每头牛的产奶周期;然后农场主想要杀一些奶牛来吃,所以每天就把产奶量最小的杀来吃;如果有两只产奶量一样小,那今天就不杀。输出没有杀掉的牛的个数,以及最后杀牛的日子。解题思路:暴力枚举, 注意说停止的时间,即当前天数 - 上一次吃牛的日子 >原创 2013-11-24 15:40:35 · 1966 阅读 · 0 评论