和题解大致相同的思路 /* HDU 6041 - I Curse Myself [ 图论,找环,最大k和 ] | 2017 Multi-University Training Contest 1 题意: 给出一个仙人掌图,求最小的k棵生成树 N <= 1000, M <= 2000, K <= 1e5 分析: 将问题转化为从每个环中选出一条边,求最大的k个和 首先找环,随便怎么找,比如 在保证每条边只走一次的情况下遍历到祖先节点就说明有环,记录一下前驱就能找出来 然后是每个环两两合并,此…
I Curse Myself Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 2266    Accepted Submission(s): 544 Problem Description There is a connected undirected graph with weights on its edges. It is gu…
题目: 点这里OvO http://acm.hdu.edu.cn/showproblem.php?pid=6041 2017 Multi-University Training Contest - Team 1 - 1009   题解: 1.由于每条边只在一个环中,每个环必然要拿掉一条边,而这些边都是不重复的,那么最小生成树就对应的是通过求每个环中拿掉一条边,总和最大的组合对应的剩下的树(第k小生成树对应第k大组合剩下的树).xjbdfs搜一下环,把每个环中的点放到一个集合中. 2.然后对集合排…
I Curse Myself Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description There is a connected undirected graph with weights on its edges. It is guaranteed that each edge appears in at most one simple cy…
/* HDU 6162 - Ch’s gift [ LCA,线段树 ] | 2017 ZJUT Multi-University Training 9 题意: N节点的树,Q组询问 每次询问s,t两节点之间的路径上点权值在[a,b]之间的点权总和 分析: 求出每个询问的LCA,然后离线 按dfs顺序更新树状数组,即某点处树状数组中存的值为其所有祖先节点的值 每个点处对答案的贡献为: 当其为第 i 个 lca 时, ans[i] -= 2 * query(a,b) , 再特判该节点 当其为第 i…
题意: 给出一个仙人掌图,然后求他的前K小生成树. 思路: 先给出官方题解 由于图是一个仙人掌,所以显然对于图上的每一个环都需要从环上取出一条边删掉.所以问题就变为有 M 个集合,每个集合里面都有一堆数字,要从每个集合中选择一个恰好一个数加起来.求所有的这样的和中,前 K 大的是哪些.这就是一个经典问题了. 点双联通就不说了 都一眼能看出来做法就是缩点之后每个环每次取一个,然后找最大的k个所以这道题的难点就在这里,做法当然是不知道啦,看了题解和博客才懂的.以前做过两个集合合并的,这个是k个合并,…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6041 [题目大意] 给出一个仙人掌图,求第k小生成树 [题解] 首先找到仙人掌图上的环,现在的问题就是从每个环中删除一个元素, 求出删除元素总和中的第K大,我们发现通过限定第K大的大小,可以有效地搜索剪枝, 限制的大小导致搜索出来的总和数量是具有单调性的,我们可以二分这个值, 然后用搜索来定位第K大的大小.Thanks to Claris. [代码] #include <cstdio> #in…
题解见这个博客:http://blog.csdn.net/ME495/article/details/76165039. 复杂度不太会算..这个经典问题的解法需要注意,维护队列里面只有k个元素即可.另外,tarjan对无向图仙人掌图缩点(即只把所有环变成一个点)得注意一下(栈得手写才能实现要求,这是因为在这里割边不能被算进环内,而在有向图中,一个点也算是强连通分量的). 代码如下: #include <stdio.h> #include <algorithm> #include &…
/** 题目:Lost in WHU 链接:https://oj.ejq.me/problem/26 题意:一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开. 思路:一个邻接矩阵(01矩阵)自身的T次方那么,a[i][j]的结果表示i到j经过T条边的方法数.(通过矩阵相乘理解 c.m[i][j] = (c.m[i][j]+a.m[i][k]*b.m[k][j]%mod)%mod; 表示i到j,通过i先到k,然后k到j:) 那么求a[1][n]的T步就是T…
/** 题目:C. Divide by Six 链接:https://oj.ejq.me/problem/24 题意:给定一个数,这个数位数达到1e5,可能存在前导0.问为了使这个数是6的倍数,且没有前导0,删除尽量少的位数,可以任意位置删除. 输出剩余的位数.如果找不到,输出-1s. 思路: 一开始心想,这么多个位置,又不知道删除几个,排列组合的情况下,简直不可能完成. 这题是我的队友tzq想出来的.在此重新思考一下. 常规想法不可能完成.一定存在某些特殊的地方.观察题目要求,6的倍数.一个数…