摘要:
点击查看折叠代码块 //Zeller公式 /* 输入一个日期,计算这天是星期几 */ #include <bits/stdc++.h> using namespace std; int getId(int y, int m, int d) { if (m < 3) {y --; m += 12;} 阅读全文
摘要:
点击查看折叠代码块 /* C(n,m) % p = n!/(m! * (n-m)!) % p = n! % p * inv[m!] % p * inv[(n-m)!] % p 求出1-n的前缀积pre[1]--pre[n] 和 1-n的逆元的前缀积 pre_inv[1]--pre_inv[n] 则 阅读全文
摘要:
点击查看折叠代码块 #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<string> using namespace std; const int maxn=1e5+10; int a[maxn 阅读全文
摘要:
点击查看折叠代码块 int read(){ int x=0,f=1;char ch=getchar(); while (ch<'0' || ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch>='0' && ch<='9'){x=x*10+ch-48 阅读全文
摘要:
P3381 【模板】最小费用最大流 添加了弧优化 点击查看折叠代码块 /* 最大流最小费用 费用为单位流量的费用 在最大流的前提下找最短路径即为最小费用 边权为当前边的流量乘以单位流量的费用 首先构建一个图用最短路算法来找到源点到各个点的最短距离 找到这个数据之后,我们就可以沿着最短路来进行增广, 阅读全文
摘要:
增添了弧优化,bfs提前判断 点击查看折叠代码块 /* 时间复杂度: O(N*N*M) */ #include <bits/stdc++.h> #define DEBUG #define d1(x) std::cout << #x " = " << (x) << std::endl #define 阅读全文
摘要:
模板:直接求一般图最大匹配: 同时求出match[i]表示与第i个节点匹配的点是哪一个 点击查看折叠代码块 #include <bits/stdc++.h> using namespace std; const int maxn=1010; const int inf=0x3f3f3f3f; typ 阅读全文
摘要:
点击查看折叠代码块 /* 树的重心也叫树的质心。对于一棵树n个节点的无根树,找到一个点, 使得把树变成以该点为根的有根树时,最大子树的结点数最小。 换句话说,删除这个点后最大连通块(一定是树)的结点数最小。 性质: 1.树中所有点到某个点的距离和中,到重心的距离和是最小的(实际应用中经常用到此性质) 阅读全文
摘要:
点击查看折叠代码块 /* 两次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 阅读全文
摘要:
点击查看代码块 #include <bits/stdc++.h> using namespace std; #define ll long long const int mode=1e9+7; int n; ll k; struct Matrix{ ll a[110][110];//一定要用long 阅读全文
摘要:
点击查看折叠代码块 #include <bits/stdc++.h> using namespace std; const int maxn=1e5+10; typedef long long ll; int n; ll a[maxn],b[maxn],c[maxn]; ll Mul = 1; ll 阅读全文