- 博客(17)
- 收藏
- 关注
原创 ZOJ - 3814 Sawtooth Puzzle
这道题最恶心的地方就是预处理了。辣鸡xcode都没法完整读入整张图(可能是没配置好),必须文件输入。 预处理的时候将每一块拼图旋转4次,和结果对比,获取哪几个旋转的情况满足条件,这样就将问题抽象化。 旋转的时候要用dfs或者bfs看那几块会跟着一起转。一开始写的时候犯二了先改变了当前块的状态再去找其他块,连样例都过不去(也还好连样例都过不去,不然debug起来真的恶心)。 总的可能性总数为4^
2017-05-05 23:23:35
289
原创 UVA - 1601 The Morning after Halloween
由于条件中有一条“每2*2的区间内至少有一个#”,所以空地的个数比较有限。于是就想到将空地离散成点,这样就可以比较高效地进行bfs了(主要还是储存,如果不离散的话储存和判重会很恶心)。 本题也可以使用双向bfs进行优化,不过既然给了12s的限时,那就没有这个必要了。 还有题目给的人数是1~3不等,如果要分开算的话会比较麻烦,将不存在的人放在一个起点和终点相同的地方一起参与bfs,就可以省很多事情
2017-05-05 23:18:04
327
原创 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
293
原创 UVA - 11882 Biggest Number
主要还是剪枝。这里的剪枝就是对下一个搜索的数字进行预处理,如果往这个方向能搜到的数字长度大于ans或者可能的最大数字大于ans就继续,不然就剪枝。 这里的预处理精度不需要很高,就很普通的bfs就行了,即便最大情况可能取不到(或者说,基本上不可能取到)。因为总的数字并不是太多,简单的剪枝足够了。#include<iostream>#include<string>#include<cstdio>
2017-05-05 23:11:05
278
原创 UVA - 1504 Genghis Khan the Conqueror
如果修改边权的边如果不是组成最小生成树的边,那么肯定不会有影响。 那么对于其他的边来说,就把它删了然后找到最短的替代边,和原树+修改的边权中选小的那个即可。 其实就是次小生成树的变种,只是保存每一条边删除以后的最小值罢了。#include<iostream>#include<string>#include<cstdio>#include<set>#include<stack>#incl
2017-05-05 23:05:07
396
原创 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
287
原创 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
263
原创 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
217
原创 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
256
原创 UVA - 11183 Teen Girl Squad
最小树形图,朱刘算法 可以看一下这个: http://blog.youkuaiyun.com/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
325
原创 UVA - 10600 ACM Contest and Blackout
单纯的次小生成树 这里是先建最小生成树,然后依次不用最小生成树的某一条边再建最小生成树,得到的最小值就是次小生成树。 这个写法比较简单易懂,但是时间会消耗的比较多。还有一种方式是建完最小生成树之后删一条边,这样就会得到两棵子树,然后找一条能够连接两棵树的边加进来就可以了。我在UVA - 1504里运用到了这种做法的变种,不过这道题用的是上面那个写法。#include<iostream>#inc
2017-05-05 22:42:06
234
原创 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
216
原创 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
241
原创 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
179
原创 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
207
原创 卡牌游戏II - bfs
题目描述有N张卡片,上面印着整数a1,a2,a3……an, 可以选取其中任意数量张卡片,求出一个和S,共有2^N-1个和 要求出最小的前N个和分别是多少输入格式题目包含多组数据。 输入的每一行有一个整数T(1<=T<=5)代表有T组数据 对于每组数据分为两行: 第一行有两个整数N,K(其中1<=N<=200000,1<=K<=min(2^N-1,200000)) 第二行有N个整数,分别是
2017-04-17 17:46:12
535
原创 蓝桥杯练习 ALGO-132 算法训练 Maze
原题链接 问题描述 一个含有n个点的迷宫是一棵树(一个任意两点之间都恰好有一条路径的无向图)。每个点都有一定的概率成为这个迷宫的入口和出口。 从这个迷宫走出去的方法是从入口开始进行深度优先搜索。如果当前有多个移动方案,那么等概率的选择移动方案中的一个。DFS的过程为以下的伪代码: DFS(x) if x == exit vertex then finish se
2017-04-03 21:00:41
782
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人