随笔分类 - 图论
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3887题目大意: 给你一颗n个节点的数,对于每个节点i,问你每个节点的子树中有多少个节点序列数小于i,求f[i]。解题思路: 用样例来说明,我们可以先深搜一遍,那么深搜得到的序列就是 7,3,15,15,12, 12, 3, 4, 4, 1, 1, 10, 14, 13, 13, 2, 2, 14, 10,……9, 7 对这个序列进行分析可以发现,举例:3,15,15,12, 12, 3 , 节点3中间的数就是它的子树序列。 dfs打好序列后就对序列进行遍历一遍,开两个st[], sd[] 数组,
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2992题目大意:有一家物流公司要送货炒年糕起点(1)送到终点(n),途中有n个城市其中只有h家客栈是免费休息的,途中有m条路通向不同的城市,开车的司机每天最多开10个小时的车程,问你起点送货到终点最少需要住几家客栈(规定只能住自家免费客栈)。 如果答案不存在输出-1。解题思路: 司机从起点或者休息的客栈出发,落脚点必是下一家休息的客栈或者终点。所以对每家客栈(包括起点)spfa一次,找出客栈间最小车程小于十小时的,如果两件客栈间车程小于10小时则令他们的行走天数g[u][v]为1。 开始把终点也放.
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3594题目大意:给你一个图,让你判断他是不是仙人掌图。仙人掌图的条件是:1、是强连通图。2、每条边在仙人掌图中只属于一个强连通分量。仙人掌图介绍 --> http://files.cnblogs.com/ambition/cactus_solution.pdf解题思路:1、首先得先熟练掌握塔尖tarjan算法的应用。2、必须了解仙人掌图的三个性质:(1).仙人掌dfs图中不能有横向边,简单的理解为每个点只能出现在一个强联通分量中。(2).low[v]<dfn[u],其中u为v的父节点(3
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586题目大意:有一棵n个节点n-1条边的树。然后给你两个点u,v,让你求u到v的距离。解题思路: m询问次数比较小,算一下时间复杂度。用邻接表+bfs完全可以过。 会的就不写了,这里我用邻接表+dfs+LCA。做的最近公共祖先第一题。可做模板。 感谢袁神!!! 1 #pragma comment(linker, "/STACK:1024000000,1024000000") /// hdu可以用这个操作防止栈溢出,强大~ 2 #include <iostream>
阅读全文
摘要:题目链接:http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=14074题目大意: 给你一个n个点加权无向图,要你从里面找一个路径最短的环,每个点只能经过一次 ,如果存在这样的最短环则把路径给打印出来,如果有多个,打印一个出来即可。解题思路:最小环的定义:经过一条简单路径(除起点每点只经过一次)回到起点成为环,并且环的总长度最小称为最小环。开始直接用floyd求每个点的dist[X][X],发现输出的时候问题很大,本题是floyd的扩展板。如果简单的floyd打印路径算法还不熟悉可以看看这个博客的解释,很详细。http
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3172题目大意: 找朋友,遇见新朋友就把他们的朋友圈子合并,输出总的朋友数。否则若已经在同一个,则直接输出就行。解题思路:明显的并查集,朋友数值需要再开一个数组存储父节点以下圈子人数,不在同一圈子合并就是。但是敲出代码后你会果断发现TLE。网上很多解题报告也是TLE,赛后的数据藐视加强了很多。用并查集+map暴搞明显要超时。这里就有点小技巧,对map进行指针优化处理。 1 #include <iostream> 2 #include <cstdio> 3 #include &
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3038题目大意:给你n给整数,m次操作。每次操作是给出三个整数a,b,c; 子序列a~b的和为c。找出m次操作中有多少次不合法,不合法的操作舍去。解题思路:先开一个dis[n]数组,dis[x]记录的是与父节点的距离。d[x]记录的是[0,x]的和 dis[x]=d[x]-d[pre[x]];对于每个操作:1.如果操作合法,则进行更新。 注意:节点小的作为父节点放前面。2. 如果不合法(前提是父节点相同),即dis[b]-dis[a]不等于c,次数加1. 1 #include <iostrea
阅读全文

浙公网安备 33010602011771号