![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
HDOJ
文章平均质量分 59
Crossing over
这个作者很懒,什么都没留下…
展开
-
HDU 3371 Connect the Cities
传送门这道题各种奇技淫巧,然而也只是勉强不超时。 题目中的k不是指k个连通的城市,是指k行信息,每行才是连通的城市,而且每行给出的不一定是连通分量。第一种用并查集做,关于连通的城市怎么处理,不能union两点,只能往边表里添加一条权值为0的边,而且要顺着加边(一条链),不能放射状加边。 而且好像不来并查集那两个优化还过不去?(那俩优化表示终于派上用场了)不知道。反正过去了也是九百多ms,没什么意原创 2017-04-08 17:40:07 · 227 阅读 · 0 评论 -
HDU 1811 Rank of Tetris
传送门给定点之间的关系,让你判断序列是否唯一或者非法。 注意的是 点之间相等的话总是可以根据另一种关系排序,所以如果某些点相等的话就不用考虑他们之间的关系了(他们之间的排序是唯一且固定的),而且他们在总排序上是连续的。 所以相等的一些点可以看成一个连通分量,采取“缩点”的思想,他们可以由其中的一个点代表。 所以问题就是,怎么判断有环(也是非法的一种),怎么判断不唯一,怎么判断“绝对非法”(就是原创 2017-04-09 23:18:57 · 201 阅读 · 0 评论 -
HDU 4126 Genghis Khan the Conqueror
传送门这个题借鉴了别人思想自己写的,题目大意是,给定图,保证每两点之间最多有一条直接相连的边,先给出原始图,然后Q次更新,每次增加某条边的权值,每次更新独立,求出本次的mst值,最后求平均。 所以问题就是根据每次更新以及原始mst求最新mst。两种情况, - 更新边不是原始mst上的。所以还是原始mst的值。 - 更新边是原始mst上的。因为更新一定是增加,所以这时这条边可能有一条原始ms原创 2017-04-18 21:40:35 · 356 阅读 · 0 评论 -
HDU 2489 Minimal Ratio Tree
传送门这题不会。还以为有什么方法能直接搞出来最小的ratio以及那些点,结果就是枚举,不过就算是枚举我也写不出来啊~ 主要的思想就是dfs选择m个点,而且更重要的是 不是中途选够了m个点就怎么样怎么样,而是必须搞到最后一层,这样select的值才完备了,所以中间可以剪枝,比如如果选了m+1个点就可以直接return了,比如如果现在已选的加上接下来都选也达不到m也可以return了(这个没实现)。原创 2017-04-10 16:22:23 · 267 阅读 · 0 评论 -
HDU 1829 A Bug's Life
传送门这道题网上主要有两种方法,我都想了一遍,写点总结,我自己看。第一种是找到的一种好理解的方法,sex[a]=b相当于点a的原配是b,之后若出现a c,就把c和sex[a]=b合并,相当于情敌之间合并到一起,因为是情敌了,所以肯定是同性了,之后若有点对在同一集合那么就错误了。 这种思想是完全等价于题目要求,同性对的判定,只有出现在情敌之间才能被判定出来,情敌包括直接情敌(三角)和间接情敌(奇环,原创 2017-04-23 18:39:16 · 2103 阅读 · 0 评论 -
HDU 3652 B-number
传送门数位dp。有一种数,能被“13”整除而且数位里包含“13”,求[1,n]中这种数的个数。for short是简称的意思。之前求过数位里不包含“XX”的,中途判断就可以了。但如果求的是包含的个数,要么取反、要么只能最后判断。以下几点。这道题要用三维状态,两个条件各用一维。这两个条件都是运行到最后一位(反正大概是最后)才能判断出来。对包含“13”的判断,设计三个状态,分别表示:之...原创 2019-07-07 21:59:10 · 170 阅读 · 0 评论 -
HDU 3709 Balanced Number
传送门数位dp。(这题比较牛批)给你一个数,如果能选取这个数的某个数位作为支点(pivot),使得支点左右两边的各个数位的加权和相等(不包括支点)(权值为该数位到支点的距离),那么就称这个数为平衡数。然后问你[x,y]中有几个平衡数。举个例子,4139是平衡数(以3为支点),20是平衡数(以2为支点)。。。以下几点:将题目条件转化为一个在各个数位上连续计算的公式。就像HDU 4734那...原创 2019-07-07 23:22:48 · 237 阅读 · 1 评论 -
HDU 2089 不要62
传送门数位dp。给一个左闭右闭区间,统计个数。dp[i][j]表示当前从第i位枚举到最低位(第0位)、在j状态下符合条件的个数。j表示第i+1位是不是6。初识数位dp,说几点看法。之所以要设计这么个dp数组,就是为了重复利用(记忆化搜索)。不这么干的话,每种i,j的组合都可能要被计算多次。现在只用第一次计算,然后再碰见这样的i,j组合就不用再算了。当然,前提是不在limit模式下。...原创 2019-07-03 22:03:18 · 75 阅读 · 0 评论 -
HDU 3555 Bomb
传送门数位dp。给一个N,问你从[1,N]中包含49的数的个数。主要有两点。solve(x)求的是[0,x]中不包含49的个数(一检测到“49”就continue了)这题要用__int64,这玩意linux还用不了,所以定义一个typedef是好习惯,方便改。#include <cstdio>#include <iostream>#include <...原创 2019-07-03 22:19:20 · 74 阅读 · 0 评论 -
HDU 4734 F(x)
传送门数位dp。给一个函数F(x),然后问你对于[0,B]中的每个数x,满足F(x)<=F(A)的x的个数。inclusive表示闭区间。可以看出,题目定义的这个函数和每个数位相关。所以,在对每个数位进行dfs的过程中,随着这个数一点点被确定,这个数的F(x)也逐渐被确定(而且这个过程是单调递增的,非严格)。所以可以想到dp的第二维表示:从最高位到第i+1位的部分F(x)值。所...原创 2019-07-03 23:01:20 · 156 阅读 · 0 评论 -
HDU 4081 Qin Shi Huang's National Road System
传送门这个题也是类似求A/B比值最优的问题,应该不能简单贪心求解,就只好枚举喽。 A是某条边上两点的点权之和,B是在上述两点已经连通的情况下图的最小生成树的值。想让A/B最大。 枚举每条边,也就枚举了每种可能的A,有两种情况: - 该边是mst上的边,在这两点已经确定的情况下,B的最小值就是mst的值减去该边的权值。(借助kruskal算法可以理解) - 该边不是mst上的边,此时mst原创 2017-04-10 23:27:33 · 268 阅读 · 0 评论 -
HDU 3938 Portal
传送门找两点间最长边(一条路径)的最小值(所有路径),这个值的意义在本题中相当于这两点可以在某种意义上连通了,然后给定一个值L问你最多能连通多少种两点。 需要注意的是L不是和的上限,而是单个两点间费用的上限。所以只用想有多少种两点间的费用小于等于L就行了。 而两点间的费用必然等于某条边的权值。 要知道,边的权值按从小到大离散分布,那么L可以退化到某个小于等于它的边的权值上。 所以,每次uni原创 2017-04-10 14:17:45 · 289 阅读 · 0 评论 -
HDU 1598 find the most comfortable road
传送门这题不会,记住写法就行了,好像都是这么写的? 第一次从最小边开始往上添,第二次从第二小边开始。。。每次添边直到那俩点连通,每次记录该次的极差并更新最优值。 可得到的结论是,第i+1次添的最后一条边肯定不会比第i次添的最后一条边权值还小。#include <iostream>#include <algorithm>#include <vector>#include <cstring>原创 2017-04-08 21:46:24 · 222 阅读 · 0 评论 -
HDU 1198 Farm Irrigation
传送门这个题就是考建图,其实想起来以前玩的一个手机游戏就是这种类似铺管道的。 在矩阵里,每个点往4个方向看一下能不能和相邻点接上,但是这样的话要判断重复。更好的想法是往右下两个方向就行了,遍历矩阵按照外层从上到下,内层从左到右。#include <iostream>#include <algorithm>#include <vector>#include <cstring>using na原创 2017-04-08 18:03:40 · 217 阅读 · 0 评论 -
HDU 1272 小希的迷宫
传送门这题主要就是点的数量不确定,另外一个点都没有的话就是YES,而且这题数据里没有有环非连通图,所以直接判断边和点的数量关系即可。#include <iostream>#include <algorithm>#include <vector>#include <cstring>#include <unordered_set>using namespace std;unordered_se原创 2017-04-08 20:06:49 · 325 阅读 · 0 评论 -
HDU 3926 Hand in Hand
传送门图同构问题 Graph Isomorphism不过这道题中点的最大度是2,所以图的构型中每个连通分量要么是链(或单个点),要么是单环,所以同等大小的连通分量要区分两种,之后挨个对比就行了。 我一直使用的都是并查集的“根记录个数(负值)版本”。 C++的pair已经写好operator<函数了,按照字典序比较。#include <iostream>#include <algorithm>原创 2017-04-10 15:51:40 · 374 阅读 · 0 评论 -
HDU 1325 Is It A Tree?
传送门这个题是判断是否为树。 树的边是有向的,树也可以为空。 代码里面,s指子结点集,total指结点集,v指边集。 还有一个坑,最后结束标志是负数而不一定-1?#include <iostream>#include <algorithm>#include <vector>#include <cstring>#include <unordered_set>using namespac原创 2017-04-08 20:19:18 · 270 阅读 · 0 评论 -
HDU 1856 More is better
传送门找最大连通分量,没有一对pairs就输出1。#include <iostream>#include <algorithm>#include <vector>#include <cstring>using namespace std;const int MAXN = 1e7 + 2;int pre[MAXN];int pairs;int opt;int f(int x){原创 2017-04-08 21:25:53 · 190 阅读 · 0 评论 -
HDU 1102 Constructing Roads
传送门3371的弱化版,怎么都能过。#include <iostream>#include <algorithm>#include <vector>#include <cstring>using namespace std;const int MAXN = 1e2 + 3;const int INF = 1e9;int dis[MAXN][MAXN];int N, Q;int d[M原创 2017-04-08 21:34:16 · 161 阅读 · 0 评论 -
HDU 1879 继续畅通工程
地址已经有些边连通了,用并查集的话就是先把这些边union了(记录conn,不加opt),再把未确定的边排序然后挨个union;用prim的话把这些边权值赋为0。#include <iostream>#include <algorithm>#include <vector>#include <cstring>using namespace std;const int MAXN = 1e2 +原创 2017-04-08 16:27:47 · 336 阅读 · 0 评论 -
HDU 1875 畅通工程再续
地址mst入门题,根据各个点坐标建N*(N-1)/2个边的图。#include <iostream>#include <algorithm>#include <cstring>#include <vector>#include <utility>#include <cmath>using namespace std;const int INF = 1e9;const int MAXC原创 2017-04-08 15:21:03 · 194 阅读 · 0 评论 -
HDU 5179 beautiful number
传送门数位dp。(要考虑前导0,类似还有POJ 3252)定义一种数,要求在其十进制数位上,较高位都>=较低位,且较高位%较低位都是0(较高位都能被较低位整除)。问你[L,R]内有多少个这种数。需要注意几点。dp第二维记录第i+1位数字,整除关系可以传递。中途判断。默认之前位都已满足要求,所以只要当前位能整除第i+1位,就可整除前面任意一位。满足要求的数中,只有一个数可以含有0...原创 2019-07-04 18:33:34 · 167 阅读 · 0 评论