图论
文章平均质量分 63
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[色多项式] UOJ #308. 【UNR #2】UOJ拯救计划 & SRM 717 div1 AcyclicOrientation
一个图的 kk 染色数是关于 kk 的 nn 次(?) 多项式 称为色多项式 那么这里模6 我们只要知道模2和模3的值 然后分类讨论下就好了 一张图的0染色数是0,1染色数等于[m=0][m=0],2染色数与二分图的联通块个数有关#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define原创 2017-07-23 14:07:33 · 869 阅读 · 0 评论 -
[LCT 动态最大生成树] HDU 5398 GCD Tree
一个数肯定是和自己约数连更优那么就是动态维护最小生成树两个log#include #include #include #include#include#include using namespace std; typedef pair abcd;typedef long long ll; inline char nc(){ static原创 2016-12-19 20:27:17 · 511 阅读 · 0 评论 -
[网格最小生成树] BZOJ 4242 水壶
平面网格上的最小生成树还可以这么做 Orzbfs一遍#include#include#include#includeusing namespace std;typedef pair abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2原创 2016-06-06 07:01:28 · 1296 阅读 · 0 评论 -
[对偶 KM算法 生成树 || 最大费用可行流 || 线性规划] BZOJ 1937 [Shoi2004]Mst 最小生成树
树边减,非树边加,wi表示i号边原来的边权,di表示i号边的改变量对于一条非树边,覆盖所有树边,都要满足:wi−di≤wj+dj得wi−wj≤di+dj这样的话d就是KM算法里的顶标跑最大匹配即可#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace原创 2016-07-04 18:44:48 · 945 阅读 · 0 评论 -
[最小割唯一性 Tarjan] BZOJ 1797 [Ahoi2009]Mincut 最小割
%%%dyh对于一条边(u,v),如果在最小割中,首先要求满流。并且要求u在S集中,v在T集中,也就是在残量网络上u不能到达v。然而v能到达u,也就是判断u,v是否在同一个强连通分量中。如果一定在最小割中,那么有u一定在S集,v一定在T集。也就是u和S在同一个强连通分量,v和T在同一个强连通分量。#include#include#include#include原创 2016-08-05 14:26:03 · 675 阅读 · 0 评论 -
[BFS Tarjan_LCA 生成树] CERC 2016 H Hangar Hurdles
就是题解写的这样了#include#include#include#include#define X first#define Y secondusing namespace std;typedef pair abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf;原创 2016-12-23 16:53:40 · 828 阅读 · 0 评论 -
[XOR最小生成树 分治 Trie || Prim 堆] BNUOJ 52318 Be Friends
关于位运算生成树问题 尛焱轟在APIO上专门讲过 一些杂七杂八的东西不过还是没怎么搞清楚这个可以分治 显然对于最高位 为0的一团 为1的一团 那么只需要找最小的一条边连接 这个可以在其中一半枚举 另一半建成Trie在上面查询然后分治到低一位#include#include#include#includeusing namespace std;typ原创 2016-12-23 16:20:18 · 928 阅读 · 0 评论 -
[点双连通分量 缩点 树链剖分] Codeforces 487E #278 (Div. 1) E. Tourists
点双连通分量的缩点技巧来自:http://blog.csdn.net/a_crazy_czy/article/details/52244069在这里我们使用这样一种方法:对于每一个点双连通分量,我们建一个新建点储存点双所有点的最小权值,然后该点向点双内所有不是深度最小的点连一条边,然后深度最小的点(大多情况为割点,当然树根不一定是割点)向这个新建点连边。 注意到这棵树一定是普通原创 2016-12-24 15:57:12 · 652 阅读 · 0 评论 -
[二分图 dfs 打标记] BZOJ 4424 Cf19E Fairy
二分图不能有奇环那么这条边一定在奇环的交上 还不能在偶环上 因为偶环和奇环会组成新的奇环那么给奇环打+1标记 偶环打-1标记 标记为奇环个数的边即可这种打标记的树D方法比较重要#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline原创 2016-10-31 18:05:43 · 878 阅读 · 0 评论 -
[SPFA 分块建图] BZOJ 4070 [Apio2015]雅加达的摩天楼
最坏情况有n^2条边,一般最短路算法都不能过。考虑用分块的思想来优化建图。Pi>sqrt(n),暴力加入每一条边,每次最多sqrt(n)条边。Pi≤sqrt(n),对于每个点添加sqrt(n)个辅助点,一层一层走,边数是O(n*sqrt(n))的。总边数和总点数都是O(n*sqrt(n))。块不能太大 不然爆内存 块最大100#include#include#i原创 2016-05-04 13:40:57 · 692 阅读 · 0 评论 -
[A* K短路 || 可持久化堆] POJ 2449 Remmarguts' Date
这就是裸的k短路了 学习一发A*的姿势:http://yzmduncan.iteye.com/blog/1162759这个S==T的坑要注意#include#include#include#include#include#define V G[p].vusing namespace std;inline char nc(){ static char buf[原创 2016-05-02 21:12:45 · 577 阅读 · 0 评论 -
[SPFA] BZOJ 2622 [2012国家集训队测试]深入虎穴 & BZOJ 2617 [Ioi2011]crocodile
题解:http://blog.csdn.net/wzq_QwQ/article/details/47997617其实总体东西就是个SPFA,不过这里面我们需要做一些改动。这只老虎是DP老虎,他每次会占据你的最优方案。所以使得你只能用次优方案来更新最优方案以及次优方案。这就是SPFA的路子。但是这个路子并不够。让我们考虑一个点只有一个儿子的时候。他可能会扫一圈后第一次原创 2016-04-13 10:49:23 · 1017 阅读 · 0 评论 -
[倍增 floyd] BZOJ 2165 大楼
倍增喽try-catch 语句 真是涨姿势 还可以这么用#include#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+原创 2016-03-15 18:40:30 · 693 阅读 · 0 评论 -
[朱刘算法推论 拓扑序DP] BZOJ4011 [HNOI2015]落忆枫音
传送门:http://blog.csdn.net/popoqqq/article/details/45194103很文艺的题目朱刘算法的推论 如果除根节点外每个点都选择一条入边,由于没有环,因此一定会形成一个树形图 去掉多余情况的过程是个拓扑序DP#include#include#include#define V G[p].v#define Mod 1000原创 2016-03-15 10:39:30 · 656 阅读 · 0 评论 -
[次小生成树] Prime Kruskal
Prime#include#include#include#define MAXINT 2147483647/2using namespace std;int a,b,w,n,m,t,tot,ntot=MAXINT;int e[5001][5001],flag[5001],pre[5000],dis[5001];int maxd[5000][5000];inline int原创 2016-02-04 20:21:12 · 743 阅读 · 1 评论 -
[删边最短路 并查集] BZOJ 1576 [Usaco2009 Jan]安全路经Travel
hzwer是这么说的首先用dijkstra得出最短路径树然后我的做法是树链剖分+线段树对于一条不在最短路树的有向边(无向可看成两条有向)u-v,长度L,设t=lca(u,v)那么对于t-v的路径上所有点x,都可通过1-t-u-v-x路径长度为d[u]+L+d[v]-d[x]最小化这个长度,也就是最小化d[u]+d[v]+L所以我们原创 2016-11-04 07:01:34 · 617 阅读 · 0 评论 -
[删边最短路 并查集||线段树] BZOJ 2725 [Violet 6]故乡的梦 & 4400 tjoi2012 桥
首先求出一条S到T的最短路P,如果不是最短路上的边删了肯定不影响答案。接着证明去掉一条边(u,v)之后最短路一定是这样存在一条边(x,y),然后最短路径是S->x->y->T,并且S->x,y->T都是原图中的最短路。考虑S的最短路径图和T的最短路径图。于是只要考虑一条边(x,y),然后求出S到x的最短路和这条最短路最早什么时候离开P,记作x’,同理求出y’。于是(x,y)这条边可原创 2016-11-04 07:04:50 · 2058 阅读 · 0 评论 -
[子集DP 斯坦纳树 模板题] HDU 4085 Peach Blossom Spring & BZOJ 4006 [JLOI2015]管道连接
斯坦纳树的模板题 状态f[s][j]f[s][j]表示 状态s表示的点集 在 j 连通 的代价 层间转移很轻易 层内转移 用最短路算法 平均情况下SPFA更好些 这两道题都可以生成森林而不是树 那么加一个check检验下#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define cl(x)原创 2017-02-15 21:48:17 · 529 阅读 · 0 评论 -
[Kruscal 二分] BZOJ 2654 tree
Orz hzwer给白色边都加上一个值,做mst会使得选取的白边数量减少,所以可以二分它hillan 说 此题由于数据有问题 并没有保证一定能生成有need条白色边的生成树所以大家二分答案的时候全加上Mid 之后再减去Mid*(n-1-ned)#include#include#includeusing namespace std; inline ch原创 2016-06-24 23:35:53 · 481 阅读 · 0 评论 -
[贪心 构造] SRM 717 div1 ScoresSequence
首先他保证图唯一确定,那么可以把图给构出来 类似这个题,按照出度从大到小排序,出度最大那个点怎么分配,类似无向图可图判定,应该是向出度小的点连,使得出度大的向他连,让出度大的出度减小// BEGIN CUT HERE #include<conio.h>#include<sstream>// END CUT HERE #include<cstdio>#include<cstdlib>原创 2017-07-05 19:11:09 · 384 阅读 · 0 评论 -
[特殊的一般图最大匹配] BZOJ 4874 筐子放球
我们把能够放在一个桶里的球连边 就是个最大匹配 这种图比较特殊 其实是比较老的模型了 在算法合集之《数据关系的简化》就有讲过一个连通块 必然能够达到⌊n2⌋\lfloor {n\over 2}\rfloor 这个上界 具体我们把一个连通块拎成一棵树 其中左儿子和自己同名 右儿子和自己同姓 我们每次必然能够找到一个点 他的儿子全是叶子 如果只有一个儿子 直接连不然 可以选择一个 把另一个原创 2017-06-01 20:52:56 · 547 阅读 · 0 评论 -
[高斯消元 线性基 生成树 随机化权值Xor] BZOJ 3569 DZY Loves Chinese II
很好的建图姿势:我们找到这个图的任意一棵生成树 然后对于每条非树边将其的权值赋为一个随机数对于每条树边 我们将这条树边的权值设为所有覆盖这条树边的边权的异或和那么图不连通当且仅当删除一条树边和覆盖这条树边的所有边集 而由于刚才的处理一条树边和覆盖这条边的所有边集的异或和为零于是问题转化成了对于给定的k条边是否存在一个边权的异或和为零的子集 果断高斯消元 由于使用原创 2016-06-06 06:54:51 · 611 阅读 · 0 评论 -
[真正的单色三角形] BZOJ 3498 PA2009 Cakes
Description给定一个无自环重边的无向图,求这个图的三元环的个数以及补图的三元环个数。 n≤105,m≤105n ≤ 10^5,m ≤ 10^5PS. 可以在这里交Analysis这个东西 首先我们可以用BZOJ 2916 [Poi1997]Monochromatic Triangles的方法算出原图三角形和补图三角形的个数之和 然后我们再算出原图三角形的个数就好了 以下的代码都是求原图原创 2017-03-04 23:39:51 · 1132 阅读 · 0 评论 -
[动态最小生成树 CDQ分治] SnackDown 2017 Online Elimination Round #GQUERY Game Revisited
给每条边的权值赋为编号 那么就相当于一个做kruskal的过程 也就是一个最小生成树的过程 跟BZOJ 2001 [Hnoi2010]City 城市建设一样? 被阿爷教导了 多年前的模板又臭又长#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef pair<int,int> abc原创 2017-06-06 15:15:58 · 616 阅读 · 0 评论 -
[一般图最大匹配 带花树] BZOJ 4405 [wc2016]挑战NPC
%%VFK 神出题 神构图传送门http://blog.csdn.net/yihuikang/article/details/10460997http://fanhq666.blog.163.com/blog/static/8194342620120304463580/模板基本是按照上面来打的#include #include #in原创 2016-02-05 15:23:00 · 1331 阅读 · 0 评论 -
[BEST定理 矩阵树定理] BZOJ 3659 Which Dreamed It
BEST theorem 一个证明?注意区分下题目中要求的“欧拉回路”的条数和定理中欧拉回路的条数 欧拉回路是个回路 所以存在循环同构 题中要求起点是1 实际上还要乘上1的度数 因为从1的任一边出发在题中都算作一种不同方案#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef lon原创 2017-05-06 07:04:50 · 1678 阅读 · 0 评论 -
[矩阵乘法转图论 强连通] Codeforces 403C #236 (Div. 1) C. Strictly Positive Matrix
考虑矩阵乘法在图论下的意义 Aki,j>0A^k_{i,j}>0意味着ii到jj存在长度为kk的路径 我们考虑两两之间都有路径 那么必定是一整个强连通分量 这是必要性 因为至少有子环 当kk足够大时 肯定能够成立 这是充分性#include<cstdio>#include<cstdlib>#include<algorithm>#define read(x) scanf("%d",&(x原创 2017-03-14 10:58:54 · 612 阅读 · 0 评论 -
[可图性判定 Havel-Hakimi定理 构造] Codeforces Gym 100269 NEERC 13 Northern K. Kids in a Friendly Class
黑点和白点的个数可以从小到大枚举 黑白点之间的连边是显然的 那么对于白点或黑点内部 我们就需要连边使得每个点度数相同每次选两个剩余度最大的点相连是错误的 反例 6 2那么应该怎么连 需要Havel-Hakimi定理 由非负数组成的非增序列s:d1,d2,⋯,dn(n≥2,d1≥1)s:d_1,d_2,\cdots,d_n(n\geq2,d1\geq1)是可图的,当仅当序列s1:d2−1,d3原创 2017-04-07 06:55:05 · 1042 阅读 · 0 评论 -
[完全二分图生成树个数] BZOJ 4766 文艺计算姬
结论题 我也不会证 Kn,m=nm−1∗mn−1K_{n,m}=n^{m-1}*m^{n-1}#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;ll n,m,P;inline ll mul(ll x,ll y){ return (x*y-(ll)(((原创 2017-03-07 20:17:49 · 2806 阅读 · 0 评论 -
[无向图简单环计数 状压DP] Codeforces 11D Beta Round #11 D. A Simple Task
这是NP的 算是一道模板题 学习下#include<cstdio>#include<cstdlib>#include<algorithm>#define read(x) scanf("%d",&(x))using namespace std;typedef long long ll;const int N=20;int n,m;int w[N][N];ll f[1<<N][N],an原创 2017-03-06 20:41:13 · 698 阅读 · 0 评论 -
[最小环 最小环计数 最大平均环 模板题] POJ 1734 Sightseeing trip & FZU 2090 旅行社的烦恼 & POJ 2949 Word Rings
不多说 网上有很多#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define cl(x) memset(x,0,sizeof(x))using namespace std; const int N=105; const int oo=1<<29; int n,m,Ans; int原创 2017-02-17 21:49:26 · 613 阅读 · 0 评论 -
[竞赛图三元环存在性判断] HDU 4324 Triangle LOVE
给一个竞赛图 判断是否有三元环 首先 如果我们任意一个环 就可以找到一个三元环 证明: 假设有环上三个相邻的点a-> b-> c 如果c->a有边 就已经形成了一个三元环 如果c->a没边 那么a->c肯定有边 这样就形成了一个n-1元环 递归即可 我们可以考虑Tarjan求出强连通分量即可一个强连通分量必定包含一个环 不考虑读入 判断单次 O(n+m)O(n原创 2017-03-04 20:00:35 · 1879 阅读 · 0 评论 -
[主席树 Kruscal] BZOJ 3545 [ONTAK2010]Peaks & 3551 [ONTAK2010]Peaks加强版
Orz hzwer据出题人的做法。。。就是做最小生成树,但合并两结点x,y的时新建结点ext,把ext连向fa(x),fa(y)这样建出一棵树,ext的权为该边的边权找一个点v不超过x的子树的根,可以用倍增,以它为根的子树就是v不超过x所能到达的连通块dfs序+主席树就行了。。#include#include#include#defin原创 2016-06-24 23:28:13 · 438 阅读 · 0 评论 -
[最短路] BZOJ 4239 巴士走读
暴力最短路#include#include#include#includeusing namespace std;typedef long long ll;typedef pair abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fr原创 2016-06-06 07:42:27 · 911 阅读 · 0 评论 -
[分治 floyed] 2016 计蒜之道 复赛 百度地图的实时路况
使用分治,考虑Floyd算法本来就是一个增量的过程。记solve(l,r)表示加入除了l到r之间的点的APSP然后分治时间复杂度O(n^3logn)#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;原创 2016-11-09 10:28:51 · 482 阅读 · 0 评论 -
[floyed 增量 离线] BZOJ 1774 [Usaco2009 Dec]Toll 过路费
考虑floyed的过程 每次增加一个中间点k那么我们按权值从小到大加k 然后每次增量后更新答案#include#include#include#includeusing namespace std;typedef pair abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p原创 2016-11-17 07:19:56 · 405 阅读 · 0 评论 -
[欧拉回路 二分图] CEOI 2005 Day1 Depot Rearrangement
论文:仇荣琦《欧拉回路性质与应用探究》#include#include#includeusing namespace std;typedef pair abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fr原创 2016-12-06 21:03:25 · 665 阅读 · 0 评论 -
[中国邮路问题 欧拉回路 最短路 一般图匹配||状压DP] FZU 1009 Jogging Trails
论文:仇荣琦《欧拉回路性质与应用探究》本来以为完全图匹配有什么高深的算法 结果去看参考资料里的论文就是带花树 汗 这道题n小 状压每个点的奇偶性#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=b原创 2016-12-06 21:07:48 · 1010 阅读 · 0 评论 -
[欧拉路径] POI 1996 Stage II Problem 3 Gambling
详见:http://blog.sina.com.cn/s/blog_51cea4040100hf8v.htmln个发生器就是n个点,边是每个发生器到它产生的数字,单向边。 那么,这题要做的事就变成,走一条路,使得在无路可走的时候,要么是没有停在n点,要么是没有遍历所有的边。 如果图不是欧拉路图:那么,我们随便dfs找条路就OK啦。 如果图是欧拉路:原创 2016-12-06 21:10:04 · 329 阅读 · 0 评论 -
[欧拉回路] BZOJ 2935 [Poi1999]原始生物 Primitivus
建图十分明显 就是求最短的路径覆盖所有边对于每个连通分量 要是存在欧拉回路 那么就是边数+1如果不存在欧拉回路 那么加边成为欧拉回路 然后任意拆一条边 所以就是边数#include#include#includeusing namespace std;const int N=1005;namespace Tset{ int fat[N],rank[N];原创 2016-12-17 11:12:56 · 1215 阅读 · 0 评论