图论
萌之上荡漾
这个作者很懒,什么都没留下…
展开
-
hdu 5876 ACM/ICPC Dalian Online 1009 Sparse Graph
题目链接分析:这叫补图上的BFS,萌新第一次遇到= =。方法很简单,看了别人的代码后,自己也学会了。方法就是开两个集合,一个A表示在下一次bfs中能够到达的点,另一个B就是下一次bfs中到不了的点。一开始先把出了起点的所有点都加入A,然后从bfs的点跑一遍边, 把边相连的点从A中取出放到B中。然后遍历A集合,进行bfs。然后把B全部放入A中,清空B。于是又回到了通过边把边连接的点从A移动到B,重复b原创 2016-09-11 20:19:57 · 299 阅读 · 0 评论 -
hdu 5098 smart software installer
题目链接分析: 这道题很好理解,如果B要求A实现,那么就从A连一条有向边到B,然后在DAG上跑一个带星的最长路。 只是这个输入非常反人类啊,难点在输入上= =代码:#include <iostream>#include <map>#include <vector>#include <queue>#include <cstring>using namespace std;const int原创 2017-05-06 14:32:01 · 371 阅读 · 0 评论 -
dlutoj 1081 Prufer 序列
题目链接分析:这道题并不难。看懂了prufer序列就能明白,序列中出现的节点应该是一颗生成树的非叶子节点,而且题目已经降低了难度,序列中的相同节点只计算一次。所以,题目转变成了统计每个节点作为非叶子节点的生成树的个数。对一张图,统计生成树的个数要用到基尔霍夫矩阵(矩阵树定理),这个不明白的话先要学习一个。统计非叶子节点的想法很简单,把这个点先移除,剩余的点统计生成树的个数,那么该节点作为叶子节点的生原创 2017-03-07 20:43:20 · 298 阅读 · 0 评论 -
hdu 5927 Auxiliary Set
传送门分析:感觉这道题有点意思。就写一篇mark一下吧。 现场比赛的时候去枚举了儿子用了线段树+dfs序,和预想的一样T了。 可以换一个想法,从儿子对父亲的贡献来思考。 在unimportantunimportant点中先假设一个节点的每一个儿子对父亲节点都有importantimportant的贡献,再考虑每个儿子 如果当前儿子有两个及以上的importantimportant点,那么这个原创 2016-10-06 21:39:55 · 277 阅读 · 0 评论 -
Codeforces Round #375 (Div. 2) F. st-Spanning Tree
传送门分析:构造题。可以这么想:先把s,t两个点去掉,把剩下的点先并查集合并。这样会出现N+2N + 2个集合:ss, tt, NN个剩余集合。那么NN个集合中先把只能与ss或tt中一个相连的连起来,如果这样已经超出了要求,那么就不能构造。剩余的既能和ss又能和tt相连的集合就按照不超过dsds,dtdt这两个要求相连,可以则YesYes,否则为NoNo。这样有一个特殊情况:就是ss或者tt可能只有原创 2016-10-05 10:09:41 · 361 阅读 · 0 评论 -
hdu 5544 Ba Gua Zhen
link因为在沈阳站的比赛中我们没有做出来H题,后来才知道是高斯消元。于是我先来补一下高斯消元的题目。先做了hdu XOR对线性基有了一定的了解,然后来做一下南阳ccpc的Ba Gua Zhen分析:这个想法我也很快就想到了。看第二组样例就应该能够看出来了。 在图上,其实只有每个环上的边权的异或值有对答案有贡献。对于图中的任意一条桥边,要么没有经过,要么经过了偶数次数,所以桥边的边权贡献为0。这样原创 2016-10-26 19:26:59 · 406 阅读 · 0 评论 -
hdu 5961 传递 ccpc 2016 合肥站
传送门分析: 这道题非常有趣。。 可以这样想: 对于一个传递的图,那么对于∀a,b,c∈V\forall a,b,c \in V,如果a−>b,b−>ca -> b, b -> c,那么a−>ca -> c。画一个图可以看出来,这个的话从一个点出发一定只有两层的深度。这很好理解。那么就bfs一下,如果搜索的深度大于2就返回falsefalse就行了。这道题要mark一下。代码:/*******原创 2016-11-06 21:20:38 · 348 阅读 · 0 评论 -
Educational Codeforces Round 14 D. Swaps in Permutation
题目链接分析:一些边把各个节点连接成了一颗颗树。因为每棵树上的边可以走任意次,所以不难想出要字典序最大,就是每棵树中数字大的放在树中节点编号比较小的位置。我用了极为暴力的方法,先dfs每棵树,再用了优先队列。我估计最大复杂度约在O(Nlog(N))O(Nlog(N)),理论上应该跑不过。因为再cf上做题,看见5s时限,强行上了。很侥幸,在4秒的时候过了= =。/*******************原创 2016-09-08 19:41:17 · 282 阅读 · 0 评论 -
csu 1804 有向无环图
题目地址分析:从复杂度来看,一定不可能是枚举ii和jj来计算。1e5的规模来看,应该是O(N)O(N)复杂度比较合适。 我是这么想的,对于三个点,假设1->2有a种走法,2->3有b种走法。那么1->3应该有a*b种走法,所以图中父亲节点一定是可以通过儿子节点的权值递推得到的。有了这个想法,那么O(N)O(N)完成这道题应该就不是梦想了。 我开了val数组,val[j]val[j]表示从jj点出原创 2016-09-05 19:58:58 · 323 阅读 · 0 评论 -
Codeforces #369 div2 D.Directed Roads
codeforces原创 2016-09-02 21:21:11 · 402 阅读 · 0 评论 -
2017CCPC女生赛 hdu 6026 Deleting Edges
题目链接分析: 自己做的时候看错题了,以为是所有的点对最短路都要和原图一样,然后GG。经队友提醒,我补完了这题= = 思路大致是先跑一个最短路。如果对于一条边(i,j)(i, j), 如果d[i]+c[i][j]=d[j]d[i] + c[i][j] = d[j],那么这条边就合法。记录一下所有边的合法入度。因为一棵树中,每个点的入度只有一,所以所有的入度乘一下就好了。代码:#include <原创 2017-05-17 16:23:12 · 577 阅读 · 0 评论