分类: 模版

63 篇文章

UVA11542 Square(bitset+高斯消元)
题目链接:UVA11542 Square 题目大意: 有 $T$ 组数据,每组数据中有 $n$ 个数,分别为 $a_{1},a_{2},a_{3}...a_{n}$。从这 $n$ 个数中任选一个或多个数使得所取出来的数的乘积为完全平方数,问有多少种取法。 其中 $1 \leq T\leq 30,1 \leq N\leq 100,1 \leq a_{…
2019牛客多校第一场 H.XOR(线性基)
题目:2019牛客多校第一场 H.XOR 题目大意: 给你一个序列,问所有它的异或和为 $0$ 的子集大小之和。 $$ \left(\sum_{S \subseteq A, \oplus_{x \in S} x = 0} |S|\right) \bmod (10^9+7) $$ 解题思路: 先对 $n$ 个元素构造线性基 LB1,设其大小为 $r$…
第一节 最短路
一般最短路 Floyd 传递闭包 可以使用 bitset 优化: 例题:洛谷 P4306[JSOI2010]连通数 题目大意: 给一个 $n$ 个点的有向图,其连通数指图中可达顶点对个的个数(包括自己和自己)。求图中的连通数 问题分析: 可以直接 Floyd 传递闭包搞。 如果上面做法被卡,可以先用 Tarjan 缩点,然后在 DAG 上 BFS …
第二节 Tarjan
强连通分量 题目:P3387 缩点 题目大意: 给定一个 $n$ 个点 $m$ 条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大。你只需要求出这个权值和。 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次。 分析: 先使用 tarjan 缩点,然后对图进行重构,再对拓扑图记忆化搜索。 #include <b…
第一节 网络最大流
#include <bits/stdc++.h> typedef long long ll; using namespace std; const int N = 1e4 + 50; const int M = 2e5 + 50; const int INF = 1e9; int n, m, S, T; int head[N], tot…
第二节 最小割
最大权闭合子图 定义:有一个有向图,每一个点都有一个权值(可以为正或负或 $0$),选择一个权值和最大的子图,使得每个点的后继都在子图里面,这个子图就叫最大权闭合子图。 解法: 这个问题可以转化为最小割问题,用网络流解决。 从源点 $S$ 向每个正权点连一条容量为权值的边,每个负权点向汇点 $T$ 连一条容量为权值的绝对值的边,有向图原来的边容量全…
第三节 二分图问题
二分图最大匹配 匈牙利算法 #include <bits/stdc++.h> using namespace std; const int N = 1005; int n, m, k; int tot, head[N]; struct Edge { int nex, to; }e[N * N]; void add(int a,int b…
第四节 二分图最大权匹配
二分图最大权完美匹配:KM算法 KM算法只适用于一定存在完美匹配的情形。 洛谷P6577 【模板】二分图最大权完美匹配 题目描述 给定一张二分图,左右部均有 $n$ 个点,共有 $m$ 条带权边,且保证有完美匹配。 求一种完美匹配的方案,使得最终匹配边的边权之和最大。 输入格式 第一行两个整数 $n,m$;第 $2\sim m+1$ 行,每行三个整…
第五节 最小费用最大流
问题 P3381 【模板】最小费用最大流 题目描述 给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用。 输入格式 第一行包含四个正整数 $N,M,S,T$,分别表示点的个数、有向边的个数、源点序号、汇点序号。 接下来 $M$ 行每行包含四个正整数 $u_i,v_i,w_i,f_i$,表…
Prufer序列
Prufer 序列 定义 Prufer 序列可以将一个带标号 $n$ 个结点的树用 $[1,n]$ 中的 $n-2$ 个整数表示。可以把它理解为完全图的生成树与数列之间的双射。 建立方法:每次选择一个编号最小的叶结点并删掉它,然后在序列中记录下它连接到的那个结点。重复 $n-2$ 次后就只剩下两个结点,算法结束。 性质 在构造完 Prufer 序列…