摘要:
点击查看折叠代码块 /* 两次dfs 第一次定一个根找离他最远的点 然后以该点为根再找离他最远的点 参考:https://www.cnblogs.com/handsome-zyc/p/11237529.html */ #include <bits/stdc++.h> using namespace 阅读全文
摘要:
图论:树上问题(LCA,树链剖分) 一.LCA(Least Common Ancestors):最近公共祖先 对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u和v的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先 ——百度百科 求LCA的常用算法: 阅读全文
摘要:
概念:带花树——用来求一般图最大匹配的算法,相比较二分图的最大匹配的匈牙利算法,带花树可以处理图中有奇环的情况,将奇环缩成一个点(算法中叫做一朵花),然后再类似于匈牙利算法通过找增广路来找这个图的最大匹配。 具体的算法介绍可以参考这个博客,讲的很详细,我这里具体讲两个例题: 1.1 or 2 2.h 阅读全文
摘要:
更新: KM算法正确性的定理: 转载于:http://www.cnblogs.com/celia01/archive/2012/04/02/2430260.html 1、二分图中的相关概念: 定理:无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。 1.匹配:对于一个给 阅读全文
摘要:
模板: 二维单调队列维护二维区间最大值、最小值 点击查看折叠代码块 /* 二维单调队列可以维护区间的最大值,最小值 */ #include <bits/stdc++.h> using namespace std; typedef long long int LL; const int MAXN = 阅读全文
摘要:
点击查看折叠代码块 #pragma GCC diagnostic error "-std=c++11" #pragma GCC target("avx") #pragma GCC optimize(2) #pragma GCC optimize(3,"Ofast","inline") #pragma 阅读全文
摘要:
点击查看折叠代码块 /* 树链剖分——重链剖分 可以求LCA 用线段树可以在树上维护区间最值、求区间和、求子树和等 */ #include <bits/stdc++.h> using namespace std; const int maxn=1e5+10; struct node{ int v,n 阅读全文
摘要:
邻接矩阵: 点击查看折叠代码块 int n,m;//V1中的点数,V2中的点数 bool used[MAXN]; int line[MAXN][MAXN];//line != 0 表示存在这条边 int girl[MAXN]; bool find(int x){//递归过程 for (int j=1 阅读全文
摘要:
点击查看折叠代码块 /* 时间复杂度: O(N*M*M) */ #include <bits/stdc++.h> using namespace std; typedef long long ll; const int inf=0x3f3f3f3f; const int maxn=210; cons 阅读全文
摘要:
点击查看折叠代码块 /* 二分图最大匹配,网络流最大流 左边为n个点,编号从 1 n 右边为m个点 编号从 n+1 n+m 建立超级源点0和超级汇点n+m+1 */ #include <bits/stdc++.h> using namespace std; const int maxn=510; c 阅读全文