训练
圣人惠
这个作者很懒,什么都没留下…
展开
-
UVALive - 5713 Qin Shi Huang's National Road System
prim + 邻接矩阵储存两点间最大距离,然后枚举即可。#include<iostream>#include<string>#include<cstdio>#include<set>#include<map>#include<stack>#include<list>#include<vector>#include<queue>#include<algorithm>#include原创 2017-05-05 22:30:38 · 174 阅读 · 0 评论 -
UVA - 1601 The Morning after Halloween
由于条件中有一条“每2*2的区间内至少有一个#”,所以空地的个数比较有限。于是就想到将空地离散成点,这样就可以比较高效地进行bfs了(主要还是储存,如果不离散的话储存和判重会很恶心)。 本题也可以使用双向bfs进行优化,不过既然给了12s的限时,那就没有这个必要了。 还有题目给的人数是1~3不等,如果要分开算的话会比较麻烦,将不存在的人放在一个起点和终点相同的地方一起参与bfs,就可以省很多事情原创 2017-05-05 23:18:04 · 284 阅读 · 0 评论 -
UVA - 1599 Ideal Path
bfs两次。第一次处理路径长,第二次选边#include<iostream>#include<string>#include<cstdio>#include<set>#include<stack>#include<list>#include<vector>#include<queue>#include<algorithm>#include<cstring>#include<cma原创 2017-05-05 23:12:17 · 252 阅读 · 0 评论 -
UVA - 11882 Biggest Number
主要还是剪枝。这里的剪枝就是对下一个搜索的数字进行预处理,如果往这个方向能搜到的数字长度大于ans或者可能的最大数字大于ans就继续,不然就剪枝。 这里的预处理精度不需要很高,就很普通的bfs就行了,即便最大情况可能取不到(或者说,基本上不可能取到)。因为总的数字并不是太多,简单的剪枝足够了。#include<iostream>#include<string>#include<cstdio>原创 2017-05-05 23:11:05 · 239 阅读 · 0 评论 -
UVA - 1504 Genghis Khan the Conqueror
如果修改边权的边如果不是组成最小生成树的边,那么肯定不会有影响。 那么对于其他的边来说,就把它删了然后找到最短的替代边,和原树+修改的边权中选小的那个即可。 其实就是次小生成树的变种,只是保存每一条边删除以后的最小值罢了。#include<iostream>#include<string>#include<cstdio>#include<set>#include<stack>#incl原创 2017-05-05 23:05:07 · 316 阅读 · 0 评论 -
UVA - 12275 Sensor network
和UVA - 1395有点相似,都是求最大边权和最小边权的差值。不过这里的边数要多得多,枚举边权会超时。 所以这里用的方法是最小生成树建完之后开始添边,添一条边就会形成一个环,找到环中最小的边删除。#include<iostream>#include<string>#include<cstdio>#include<set>#include<stack>#include<list>#in原创 2017-05-05 23:01:55 · 247 阅读 · 0 评论 -
UVA - 1265 Tour Belt
最小生成树。每次加一条边之后判断一下集合是否符合条件即可。#include<iostream>#include<string>#include<cstdio>#include<set>#include<stack>#include<list>#include<vector>#include<queue>#include<algorithm>#include<cstring>#in原创 2017-05-05 22:49:35 · 224 阅读 · 0 评论 -
UVA - 10816 Travel in Desert
由于要同时满足两个条件,优先满足温度最低,其次是距离最短。 于是按照温度建最小生成树,然后把低于最高温度的边都加进来,spfa找距离最短的路线就可以了。#include<iostream>#include<string>#include<cstdio>#include<set>#include<stack>#include<list>#include<vector>#include<原创 2017-05-05 22:46:33 · 218 阅读 · 0 评论 -
UVA - 10369 Arctic Network
一棵只需要n-m条边的最小生成树#include<iostream>#include<string>#include<cstdio>#include<set>#include<stack>#include<list>#include<vector>#include<queue>#include<algorithm>#include<cstring>#include<cmath>原创 2017-05-05 22:48:08 · 188 阅读 · 0 评论 -
UVA - 10600 ACM Contest and Blackout
单纯的次小生成树 这里是先建最小生成树,然后依次不用最小生成树的某一条边再建最小生成树,得到的最小值就是次小生成树。 这个写法比较简单易懂,但是时间会消耗的比较多。还有一种方式是建完最小生成树之后删一条边,这样就会得到两棵子树,然后找一条能够连接两棵树的边加进来就可以了。我在UVA - 1504里运用到了这种做法的变种,不过这道题用的是上面那个写法。#include<iostream>#inc原创 2017-05-05 22:42:06 · 193 阅读 · 0 评论 -
UVA - 11183 Teen Girl Squad
最小树形图,朱刘算法 可以看一下这个: http://blog.csdn.net/wsniyufang/article/details/6747392#include<iostream>#include<string>#include<cstdio>#include<set>#include<stack>#include<list>#include<vector>#include<原创 2017-05-05 22:44:40 · 277 阅读 · 0 评论 -
UVA - 1395 Slim Span
枚举最小的边权,用剩下来的边建最小生成树即可#include<iostream>#include<string>#include<cstdio>#include<set>#include<map>#include<stack>#include<list>#include<vector>#include<queue>#include<algorithm>#include<cstri原创 2017-05-05 22:37:54 · 188 阅读 · 0 评论 -
UVA - 11865 Stream My Contest
二分找最小的带宽,然后最小树形图求cost#include<iostream>#include<string>#include<cstdio>#include<set>#include<map>#include<stack>#include<list>#include<vector>#include<queue>#include<algorithm>#include<cstrin原创 2017-05-05 22:34:37 · 204 阅读 · 0 评论 -
UVA - 11354 Bond
由于点数比较多,没法用邻接矩阵,所以不能用prim了 这里使用kruskal+LCA来找最大值#include<iostream>#include<string>#include<cstdio>#include<set>#include<map>#include<stack>#include<list>#include<vector>#include<queue>#include原创 2017-05-05 22:32:28 · 149 阅读 · 0 评论 -
ZOJ - 3814 Sawtooth Puzzle
这道题最恶心的地方就是预处理了。辣鸡xcode都没法完整读入整张图(可能是没配置好),必须文件输入。 预处理的时候将每一块拼图旋转4次,和结果对比,获取哪几个旋转的情况满足条件,这样就将问题抽象化。 旋转的时候要用dfs或者bfs看那几块会跟着一起转。一开始写的时候犯二了先改变了当前块的状态再去找其他块,连样例都过不去(也还好连样例都过不去,不然debug起来真的恶心)。 总的可能性总数为4^原创 2017-05-05 23:23:35 · 247 阅读 · 0 评论