图论
1
__meteor
对于未来, 我只是一个孩子;
展开
-
在仙人掌图上dp的处理 BZOJ1023+BZOJ1487
仙人掌图就是图中包含圈,但是圈不能共边。举个例子, 如下图1、2、3: 假如将这些圈的都缩成点,显然就是一棵树了,对于一棵树进行dp,那就很简单了。因此,处理这类问题需要分两步。1.当dp的边是桥,也就是不是环上的边,那我们就正常的从他的孩子中取最优解转移到该节点。2.当dp的边是在环上。我们需写一个函数对该环单...原创 2018-08-07 16:25:30 · 422 阅读 · 0 评论 -
HDU 6350 Always Online (仙人掌图,最大流)
传送门这道题真的是坑,竟然用ull,ll都会爆。首先这是一个仙人掌图。题意让求任意两点最大流,再进行异或。先说最大流,对于环上任意两点最大流,就是两条路径最小的边和,这就等效于求出环中最小的边,使环上任意一条边都加上这条边,然后去掉最小边。这样会求出一棵树。我们将边按从大到小排序,每次向空图里加一条边(用并查集维护),那么加的这条边就是两个连通分量的最大流。还是老方法。对于仙人掌图,(...原创 2018-08-12 21:25:18 · 869 阅读 · 0 评论 -
HDU5884 二分+哈弗曼树
传送门huffman模板,如果每次取k个能取完,num=k,取不完先将n%(k-1)取完,再每次取k#include<bits/stdc++.h>using namespace std;const int N=1e5+10;typedef long long ll;int arr[N], n, limit;/****************************/...原创 2018-08-28 11:37:13 · 102 阅读 · 0 评论 -
CF1037E图论思维(set::erase的用法)
传送门#include<bits/stdc++.h>using namespace std;#define fir first#define sec secondconst int N=2e5+10;typedef pair<int, int> pii;pii e[N];set<int> G[N];bool removed[N];int ...原创 2018-09-04 19:12:30 · 188 阅读 · 0 评论 -
HDU 4408 最小生成树计数
传送门思路:首先需要了解Matrix_Tree定理1.设 G是无向图的邻接表,D是无向图各个点的度数2.令M=D-G,则M的任意n-1阶余子式的行列式值的 绝对值, 就是无向图生成树的个数应注意的是邻接表的值不只是0,1值,也就是说,当图出现重边的话,邻接表该位置累加。这道题思路,对于最小生成树,克鲁斯卡尔算法是将边从小到大排序,对于同一大小的边,在最小生成树中用到的数量是...原创 2018-09-21 13:05:35 · 196 阅读 · 0 评论 -
HDU - 5521 巧妙地最短路
题意:n个点,m块,块的意思就是说,在块中的点任意两点的距离都是t,问分别从1点和n点走到某个点,这个点的花费就是二者较大的,问这n个点花费最小是多少,并按字典序打印序号思路:这题头疼的就是不知道怎么建图,暴力建图会超内存,有一个巧妙的方法是将这个块中的点全部连到一个点上,每条边花费t/2,这样任意两点仍然是t的花费。这样最多1e6条边#include<bits/stdc+...原创 2018-10-10 14:19:38 · 140 阅读 · 0 评论 -
ZOJ 3732 可图性判定--Havel-Hakimi定理
题意:给定n个点度数,问是否可以构造一个简单图。思路:Havel-Hakimi定理 :1.将度数从小到大排序2.用第一个向后面连续d[1]个点连边,若点数不够则不能构造3.若点数够,则将每个点度数减1,若出现负值,则不能构造,4.去掉该点返回步骤一,直到集合中没有点。对于多个图,只需要判定i+d[i]和i+d[i]+1这两个点度数是否一致,若一致就交换。即可达到不同图的...原创 2018-10-26 18:53:39 · 206 阅读 · 0 评论