随笔分类 - 图论
HDU 2196 Computer (树形DP)
摘要:题意:给定一棵树,然后让你找出每个结点离所有结点的最远距离。 析:也就说我们要知道离每个结点的最远距离,对于每个结点,我们知道离它最远的,要么是从父结点过来,要么是从子树中得到,dp[i][0] 表示从 i 子树中得到的 最远距离,dp[i][1] 表示 i 从子树得到的次远距离,dp[i][2]
阅读全文
HDU 4756 Install Air Conditioning (MST+树形DP)
摘要:题意:n-1个宿舍,1个供电站,n个位置每两个位置都有边相连,其中有一条边不能连,求n个位置连通的最小花费的最大值。 析:因为要连通,还要权值最小,所以就是MST了,然后就是改变一条边,然后去找出改变哪条能使得总花费最大,dp[i][j] 表示那条边左边的 i 和右边的 j, 最短距离,然后枚举MS
阅读全文
HDU 4126 Genghis Khan the Conqueror (树形DP+MST)
摘要:题意:给一图,n个点,m条边,每条边有个花费,给出q条可疑的边,每条边有新的花费,每条可疑的边出现的概率相同,求不能经过原来可疑边 (可以经过可疑边新的花费构建的边),注意每次只出现一条可疑的边,n个点相互连通的最小花费的期望。 析:要想连通先让他们连通起来,先构造出一个MST,然后再暴力,如果这个
阅读全文
HDU 4514 湫湫系列故事――设计风景线 (树形DP)
摘要:题意:略。 析:首先先判环,如果有环直接输出,用并查集就好,如果没有环,那么就是一棵树,然后最长的就是树的直径,这个题注意少开内存,容易超内存, 还有用C++交用的少一些,我用G++交的卡在32764K,限制是32768K。。 代码如下:
阅读全文
Gym 100512G Grand Tour (拓扑排序)
摘要:题意:一个团队要去参观一些学校,某些学校要在某些学校之前先参观,并且每个学校有一个权值,团队去的时间与权值的差作为难过度(最小是0), 所有的难过度的最大值是伤心度,让你安排参观顺序,使得这个伤心度最小。 析:拓扑排序,并且要逆序排,这样的话,时间大的优先,可以用优先队列实现。 代码如下:
阅读全文
CodeForces 721B Journey (DP)
摘要:题意:给定一个有向图,你从1出发到n,走尽可能多的点,并且使总权值不大于t。 析:在比赛时,竟然看成有向图了,就想了好久,感觉dp,但是不会啊。。。如果是有向图就好做多了,枚举边,然后打印就好,dp[i][j] 表示, 经过 i 个结点,并且在 j的最小时间。 代码如下:
阅读全文
UVa 12717 Fiasco (BFS模拟)
摘要:题意:给定一个错误代码,让你修改数据,使得它能够输出正确答案,错误代码是每次取最短的放入。 析:那么我们就可以模拟这个过程,然后修改每条边的权值,使得它能输出正确答案。 代码如下:
阅读全文
Gym 100962G Green Day (找规律)
摘要:题意:你用k 个生成树构成一个完全图。 析:n 个点的完全图有n(n-1)/2个边,一个生成树有n-1个边,你有k 个生成树 即边数等于 K(n-1) ,即 n(n-1)/2 == k(n-1) n = 2*k 所以2k 个边足够,你会发现在每个结点只能做一次开头或者结尾。然后找找规律就好。 代码如
阅读全文
UVaLive 6585 && Gym 100299F Draughts (暴力+回溯)
摘要:题意:给定一个 10*10的矩阵,每一个W可以跳过一个B向对角走到#并把B吃掉,并且可以一直跳直到不能动为止,现在是W走的时候,问你最多吃几个B。 析:直接暴力+回溯,深搜就好。 代码如下:
阅读全文
UVaLive 6950 && Gym 100299K Digraphs (DFS找环或者是找最长链)
摘要:题意:有n个只包含两个字母的字符串, 要求构造一个m*m的字母矩阵, 使得矩阵的每行每列都不包含所给的字符串, m要尽量大, 如果大于20的话构造20*20的矩阵就行了。 析:开始吧,并没有读对题意,后来才看懂什么意思,然后主要思想就是如果有环,那么一定是可以构造成20*20的,只要环一直重复就好,
阅读全文
HDU 5883 The Best Path (欧拉路或者欧拉回路)
摘要:题意: n 个点 m 条无向边的图,找一个欧拉通路/回路使得这个路径所有结点的异或值最大。 析:由欧拉路性质,奇度点数量为0或2。一个节点被进一次出一次,度减2,产生一次贡献,因此节点 i 的贡献为 i 点的度数除以2然后再模22degreeu⌋ mod 2)∗au。欧拉回路的起
阅读全文
UVaLive 7456 Least Crucial Node (并查集+暴力 或者 求割点)
摘要:题意:求标号最小的最大割点.(删除该点后,指定点#sink能到达的点数减少最多). 析:由于不知道要去掉哪个结点,又因为只有100个结点,所以我们考虑用一个暴力,把所有的结点都去一次,然后用并查集去判断。 当然也可以用割点和桥的模板,最后再判断一下,哪个点后面的点有多少就好。 代码如下: 并查集+暴
阅读全文
CCF 201512-4 送货 (并查集+DFS,欧拉路)
摘要:问题描述 为了增加公司收入,F公司新开设了物流业务。由于F公司在业界的良好口碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道。然而,F公司现在只安排了小明一个人负责所有街道的服务。 任务虽然繁重,但是小明有足够的信心,他拿到了城市的地图,准备研究最好的方案。城市中有n个交叉路
阅读全文
POJ 1470 Closest Common Ancestors (LCA)
摘要:题意:给定一棵树,然后有m个询问,最后统计公共祖先个数。 析:LCA,但是这个题输入太麻烦了,调试了好久,才出结果,然后就在Tarjan算法中直接统计就好了,刚开始MLE,后来又RE,没办法又换了一种方法才AC。 代码如下:
阅读全文
HDU 2586 How far away ? (LCA,Tarjan, spfa)
摘要:题意:给定N个节点一棵树,现在要求询问任意两点之间的简单路径的距离,其实也就是最短路径距离。 析:用LCA问题的Tarjan算法,利用并查集的优越性,产生把所有的点都储存下来,然后把所有的询问也储存下来,然后从树根开始搜索这棵树, 在搜索子树的时候,把并查集的父结点不断更新,在搜索时计算答案,d[i
阅读全文
CodeForces 711D Directed Roads (DFS判环+计数)
摘要:题意:给定一个有向图,然后你可能改变某一些边的方向,然后就形成一种新图,让你求最多有多少种无环图。 析:假设这个图中没有环,那么有多少种呢?也就是说每一边都有两种放法,一共有2^x种,x是边数,那么如果有环呢?假设x是这个连通块的边数, y是这个环的边数,那么就一共有2^x * (2 ^ y - 2
阅读全文
URAL 2069 Hard Rock (最短路)
摘要:题意:给定 n + m 个街道,问你从左上角走到右下角的所有路的权值最小的中的最大的。 析:我们只要考虑几种情况就好了,先走行再走列和先走列再走行差不多。要么是先横着,再竖着,要么是先横再竖再横,要么是先横再竖再横再竖,全考虑一下就好了。 代码如下:
阅读全文
UVaLive 6623 Battle for Silver (最大值,暴力)
摘要:题意:给定一个图,让你找一个最大的子图,在这个子图中任何两点都有边相连,并且边不交叉,求这样子图中权值最大的是多少。 析:首先要知道的是,要想不交叉,那么最大的子图就是四个点,否则一定交叉,然后就暴力就好,数据水,不会TLE的,才100多ms 代码如下:
阅读全文
HDU 3666 THE MATRIX PROBLEM (差分约束)
摘要:题意:给定一个最大400*400的矩阵,每次操作可以将某一行或某一列乘上一个数,问能否通过这样的操作使得矩阵内的每个数都在[L,R]的区间内。 析:再把题意说明白一点就是是否存在ai,bj,使得l<=cij*(ai/bj)<=u (1<=i<=n,1<=j<=m)成立。 首先把cij先除到两边去,就
阅读全文
HDU 3665 Seaside (最短路,Floyd)
摘要:题意:给定一个图,你家在0,让你找出到沿海的最短路径。 析:由于这个题最多才10个点,那么就可以用Floyd算法,然后再搜一下哪一个是最短的。 代码如下:
阅读全文