![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
Freopen
这个作者很懒,什么都没留下…
展开
-
网络流作业
CF708D Incorrect Flow对于容量c≥fc\geq fc≥f的情况,可以增加流量c−fc-fc−f,费用为111,可以减少流量fff,费用为111,可以容量流量一起增加,费用为222。对于c<fc\lt fc<f的情况,可以先默认把ccc增加到fff,那么减少流量时有f−cf-cf−c的流量就不用花费,其他同上。然后用类似上下界网络流的方法建下图来保证流量平衡跑最小费用可行流即可。AC Code\mathcal AC \ CodeAC Code#in原创 2020-06-14 17:09:55 · 294 阅读 · 0 评论 -
[TJOI2007]小朋友(弦图)
题目1.最小团覆盖 ≥\geq≥ 最大独立集。证明:每个团中最多只能选一个点。2.在完美消除序列上从前往后贪心能选则选的方式选出一个独立集,则这个独立集是一个最大独立集,选出的每个点与其完美消除序列顺序在其后的邻接点分别构成了一个最小团覆盖中的一个团。证明:根据完美消除序列的性质可以得到选出的每个点与其完美消除序列顺序在其后的邻接点分别构成了一个团覆盖中的一个团,所以假设选出了ttt个点,最大独立集≥t≥\geq t \geq≥t≥最小团覆盖≥\geq≥ 最大独立集。所以t=t=t=最大独立集==原创 2020-06-08 22:12:35 · 176 阅读 · 0 评论 -
[HNOI2008]神奇的国度(弦图)
弦图最小染色数=最大团大小。AC Code\mathcal AC \ CodeAC Code#include<bits/stdc++.h>#define maxn 10005#define maxm 2000007#define rep(i,j,k) for(int i=(j),LIM=(k);i<=LIM;i++)#define per(i,j,k) for(int i=(j),LIM=(k);i>=LIM;i--)#define pb push原创 2020-06-08 21:42:08 · 182 阅读 · 0 评论 -
SP5446 FISHNET - Fishing Net(弦图)
真就硬背呗弦图判定模板代码:#include<bits/stdc++.h>#define maxn 1005#define maxm maxn * maxn#define rep(i,j,k) for(int i=(j),LIM=(k);i<=LIM;i++)#define per(i,j,k) for(int i=(j),LIM=(k);i>=LIM;i--)#define pb push_backusing namespace std;int n,m;int原创 2020-06-08 21:22:06 · 201 阅读 · 0 评论 -
BZOJ 4878: [Lydsy1705月赛]挑战NP-Hard(思博题)
题目思博是个褒义词我们考虑dfsdfsdfs染色,对点xxx染上与xxx邻接的已访问过的点的mexmexmex.那么如果我们有一个点颜色为kkk(注意我们的颜色可以是000)。那么他就一定有一个邻接点颜色为k−1k-1k−1,就这样递归打印方案即可。否则这个染色方案就是一种kkk染色方案,直接输出即可。AC Code\mathrm{AC \ Code}AC Code...原创 2020-01-21 19:04:44 · 186 阅读 · 0 评论 -
小大边点覆盖匹配关系
link1\rm link1link1link2\rm link2link2link3\rm link3link3link4\rm link4link4匹配:一些边满足没有一个顶点在两条边中。有最大匹配,最大权匹配,最小权匹配。独立集:满足没有两个点之间有边。有最大独立集,最大权独立集,最小权独立集。点覆盖:一个能覆盖所有边的点集(点覆盖边:点作为边的两个端点之一)有最小...原创 2019-10-30 16:08:32 · 232 阅读 · 1 评论 -
[HAOI2006]受欢迎的牛(强联通分量)
更这篇博。tarjan\rm{tarjan}tarjan缩点有重边,DP需谨慎。。。。。。。AC Code\rm{AC\ Code}AC Code#include<bits/stdc++.h>#define maxn 100005 using namespace std;int n,m,siz[maxn];int info[maxn],Prev[ma...原创 2019-10-21 13:01:24 · 97 阅读 · 0 评论 -
NOI 2001 食物链 题解
这个比我还年长的题用所谓的带权并查集。首先,在并查集入门题《亲戚》中我们用并查集描述两人的关系。所以,我们也可以用并查集来表示动物间食物链的关系。但是吃与被吃这种关系一个数组是开不完的。因此,我们得把并查集这个森林中的每颗树的树根利用起来。设x,y是同类,所以我们从x到y连一条权值为0的有向边。原创 2017-02-21 19:17:19 · 403 阅读 · 0 评论 -
【COCI】 2271 邮递员 暴力(不是树形DP)题解 c++
【COCI】邮递员 2271 题目描述 Mirko在一个山镇找到了一份邮递员的工作。这个镇可以看作一个N*N的矩形。每个区域可能是以下之一:房子K,邮政局P,草地 ‘.’。每个区域都有一个海拔。 每天早上,Mirko要送信给镇上所有的家庭。他从邮局P处开始,可以向8个方向到相邻的一个区域,当他送完最后一份信后,他必须回到邮局。 现在用Mirko走过的路线中海拔最高点和最低点之原创 2017-07-20 18:27:12 · 440 阅读 · 1 评论 -
Kruscal
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int n,m;struct node{ int s,t,w; bool used; bool operator <(const node nxt)const{ return w<n...原创 2017-10-27 12:40:47 · 206 阅读 · 0 评论 -
并查集
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int n,m;int f[10005];int find(int now){ return f[now]!=0?f[now]=find(f[now]):now; }int main(){ int...原创 2017-10-27 12:45:05 · 157 阅读 · 0 评论 -
Dijkstra
优先队列版本#include<cstdio>#include<cstring>#include<queue>#include<vector>#include<algorithm>using namespace std;int n,m,fir[100001],dis[100001],now,loc[100001],g[100001];struct node{ int w,t,nxt原创 2017-10-25 14:12:26 · 212 阅读 · 0 评论 -
Prim
#include<cstdio>#include<algorithm>#include<cstring>#define maxn 5005using namespace std;int n,m,cst[maxn];struct node{ int to,nxt,w;}e[400005];int fir[maxn],cnt_e;...原创 2017-10-30 13:42:14 · 271 阅读 · 0 评论 -
树的先序、后序、中序非递归版
二叉树的3种遍历其实差不多,只是输出时机不一样,都是通过树根找儿子来深搜递归的。下面是三种遍历的代码:void first(int p){ if(p==0) return; printf("%d ",p); first(tree[p].l); first(tree[p].r);}void mid(int p){ if(p==0) return; mid(tr...原创 2016-10-02 10:15:51 · 217 阅读 · 0 评论 -
求树的质心
#include<cstdio>#include<algorithm>using namespace std;int n,x,y,son[101][101],cnt[101],Fa[101],size[101],sum,minx=1<<30,root;void dfs(int now){ size[now]=1; for(int i=0;i&l...原创 2017-10-31 14:10:48 · 281 阅读 · 0 评论 -
求树的直径
#include<cstdio>#include<vector>#include<algorithm>#include<cstring>#include<cctype>#define maxn 100005#define num ch-'0'using namespace std;int n,v,maxnum,loc,...原创 2017-10-31 14:15:07 · 199 阅读 · 0 评论 -
LCA树链法
#include#include#include#include#include#define maxn 20005using namespace std;void get(int &res){ char ch; while(!isdigit(ch=getchar())); for(res=ch-'0';isdigit(ch=getchar());res=res*10+ch-原创 2017-10-26 14:12:48 · 242 阅读 · 0 评论 -
Floyd
这是一个求图最短路径的算法,个人认为最好用也最有用的算法。 不扯那些高大上的,原创 2016-11-01 14:10:33 · 217 阅读 · 0 评论 -
SPFA
#include<cstdio>#include<queue>#include<cstring>using namespace std;queue<int>q;int F,N,M,W,dis[5001],a,b,w,pre[5001],z,flag,g[5001],fir[5001];struct node{ int t,wt,m;}st[500001];int main()原创 2017-10-25 14:10:45 · 147 阅读 · 0 评论 -
LCA倍增法
#include#include#include#includeusing namespace std;int n,m,fa[100005],dep[100005],f[100005][20];vectorg[100005];void get(int &res){ char ch; while(!isdigit(ch=getchar())); for(res=ch-'0'原创 2017-10-26 14:11:57 · 256 阅读 · 0 评论 -
轻重链剖分
#include#include#include#define maxn 500005using namespace std;int n,m,s;int Prev[maxn*2],info[maxn],to[maxn*2],cnt_e;int fa[maxn],siz[maxn],bel[maxn],tp[maxn],dep[maxn],cnt_l;int Q[maxn],L,R原创 2017-11-03 13:30:02 · 312 阅读 · 0 评论 -
【BZOJ4205】卡牌配对
卡牌配对 【问题描述】现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C。把卡牌分为X,Y两类,分别有n1,n2张。两张卡牌能够配对,当且仅当,存在至多一项属性值使得两张卡牌该项属性值互质,且两张卡牌类别不同。比如一张X类卡牌属性值分别是225,233,101,一张Y类卡牌属性值分别为115,466,99。那么这两张牌是可以配对的,因为只有101和99一组属性互质。游戏原创 2018-01-13 17:51:10 · 367 阅读 · 0 评论 -
【清华冬令营2018模拟】变量
变量(variable)【题目描述】有n个变量w[1]~w[n],每个变量可以取W或-W。有p个式子,形如Hi=ai|w[xi]-w[yi]|+bi|w[yi]-w[zi]|+ci|w[zi]-w[xi]|+di(w[xi]-w[yi])+ei(w[yi]-w[zi])+fi(w[zi]-w[xi])。有q个条件,形如w[x]最小化sigma(wi)+sigma(Hi)。原创 2018-01-17 18:56:45 · 484 阅读 · 0 评论 -
树上路径中位数的联想
1.枚举边。(树分治等等)2.注意如果将相等的确定一个偏序(就是说两条边就算边权相等你也要让他们之间一个小于另一个,使没有任意两个边相等)就可以用DP来计算而不用担心算重。。。。。。...原创 2018-03-09 22:53:13 · 278 阅读 · 0 评论 -
省选模拟Day6T2 开开车
开开车 ---------------- 从三角剖分的性质(不会有任意两条边在中间相交)入手,如果一条对角线将起点和终点分割开,那么起点到终点的路径中一定经过这对角线的一个端点。如果起点和终点在这条对角线的同一面,那么路径一定不会到对角线的另外一面上!那么我们可以找对角线,起点和终点在两侧则可以BFS出答案,否则递归,用分治的思想两边分均匀点可以做到O(nlogn)ACcode:#incl...原创 2018-03-09 22:59:35 · 200 阅读 · 0 评论 -
CQOI2012 交换棋子 网络流棋盘模型
交换棋子 网络流棋盘模型,白点流到白点因为是对点的限制,我们考虑拆点。为A1,A2形象的看来就是两个平面,一个在上,另一个在下。然后我们考虑交换次数这个东西如何用流量限制。当一个点A到另一个点B时。不仅B1到B2的流量要减,A1到A2的也要减。然后我们发现,除了起点和终点,别的点只要进来了白点,这个白点一定会出去。所以我们让这个白点预付款,让他耗费的流量翻倍,实际上让边的流量减半就行。然后起点终点...原创 2018-03-19 18:54:16 · 216 阅读 · 0 评论 -
BZOJ1458士兵占领
Description有一个M * N的棋盘,有的格子是障碍。现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵。我们称这些士兵占领了整个棋盘当满足第i行至少放置了Li个士兵, 第j列至少放置了Cj个士兵。现在你的任务是要求使用最少个数的士兵来占领整个棋盘。Input第一行两个数M, N, K分别表示棋盘的行数,列数以及障碍的个数。 第二行有M个数表示Li。 ...原创 2018-04-12 16:45:21 · 137 阅读 · 0 评论 -
一些与根号有关的性质
1.n个点的图中大小不同的联通块只有sqrt(n)个。2.度数大于自己度数的邻接点最多只有sqrt(n)个。3.一个数的约数个数最多为sqrt(n)级别的。原创 2018-07-08 16:22:33 · 1491 阅读 · 0 评论 -
雅礼集训DAY5T3
题意 : n个点的树,每个点有一个为0或1的权值,等概率选择一个点作为起点,然后等概率选择点v,走到点v,将v的权值异或1,当所有点的权值相等时停止,求路径长度的期望值。根据期望的线性性, 我们考虑每一个点对答案的贡献.每次选择了一个点之后, 如果没有结束, 那么下一步期望的移动距离就是这个点到其他所有点的距离和除以 n.容易发现树的形态并不影响点的期望被选择次数. 只要 0 和 1 的个数一定,...原创 2018-07-06 21:44:47 · 199 阅读 · 0 评论 -
广义后缀自动机
多个字符串共用一个后缀自动机,便于解决多个字符串的子串间的问题。模板题:4566: [Haoi2016]找相同字符Time Limit:20 SecMemory Limit:256 MBDescription给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两个子串中有一个位置不同。Input两行,两个字符串s...原创 2018-07-31 14:33:04 · 2482 阅读 · 0 评论 -
树的拓扑序列计数与同构
判断树同构 : 最小表示法 树是DAG(有向无环图)的一种, 求n个点的树的拓扑序列的个数? 考虑1~n的全排列,有n!个排列 设A子树的大小为size[A] 对于每个节点A , A在拓扑序列中要在其子树中所有其他点的后面,于是我们只考虑A的子树中的点的排列,发现只有1/size[A]的排列是符合上述要求的,又每个点的要求之间都无关(要求只是对当前点有关),所以符合所有要求的排列为...原创 2018-08-02 12:55:38 · 1639 阅读 · 0 评论 -
HDU 6305 RMQ Similar Sequence
大致题意:给你一个串A,定义RMQ相似串为,对任意区间[L,R],两个串RMQ所在位置相同。告诉你B串中每个元素服从于[0,1]上相互独立的均匀分布。B的权值定义为,当B与A串RMQ相似时,权值为所有元素之和,否则为0。现在问你B串的期望权值是多少。 串A可以看做n个数对,这n个数对之间有偏序,可以看做一个排列,B中两个数相等的几率为0,也可以看做一个数列。 发现这就是要求这两个数列构造出的笛...原创 2018-08-02 14:05:30 · 271 阅读 · 0 评论 -
基环树
基环树也叫环套树(明明更像树套环) 就是n个点n条边的连通图,可以发现只有一个环,并且删掉环上任意一个边可以变成一棵树。 尽管许多题解上都会说什么把环求出来然后分类讨论什么的, 但是,实际上删掉环上的一条边然后再加回去分类讨论要好做的多。。。。。 毕竟你不需要树上一个数据结构,再在环上再开一个数据结构。。。。。。。 套路了。...原创 2018-08-15 21:51:53 · 5740 阅读 · 0 评论 -
前缀和思想
一个区间可以拆成两个前缀和,这是一个很基本的思想。 反过来,两个前缀和的关系可以由一个区间表示。。。 有时某些区间问题可以转化为前缀和问题继而减少情况和状态。。 例: 魔术师的桌子上有n个杯子排成一行,编号为1,2,…,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获得奖品。花费c_ij元,魔术师就会告诉你杯子i,i+1,…,j底下藏有球的总数的奇偶性。 采取最优...原创 2018-08-26 12:32:52 · 1376 阅读 · 0 评论 -
Codeforces1027F Session in BSU
全世界都在考基环树系列,一场CF考了两题基环树。。。。。。 AC Code:#include<cstdio>#include<cstring>#include<cctype>#include<vector>#include<cmath>#include<algorithm>#define maxn 200...原创 2018-08-19 19:36:03 · 305 阅读 · 0 评论 -
Codeforces 1025 D Recovering BST
题意:求图中内嵌二叉搜索树是否存在。 区间DP,dp[i][j]表示i到j的点是否可以构成一颗以i为根的二叉搜索树(i可以大于等于j) 根据二叉搜索树性质,dp[i][j] |= dp[k][j] & dp[k][i+1]…….#include<cstdio>#include<cstring>#include<cctype>#inclu...原创 2018-08-20 11:07:58 · 225 阅读 · 0 评论 -
[SDOI2011]消耗战(虚树)
虚树就是由树中的几个点及他们的LCA构成的简化的树,因为树的点数被减小,复杂度也随着降低。 首先易证n个点的不同LCA最多只有n-1个,虚树的复杂度就有了保障。 然后我们考虑按照dfs序一个一个点的加入,并用栈维护当前虚树的右链,那么新加入的点x和之前虚树的LCA就是右链最下端的点与x的lca。 然后再维护右链就行。 虚树难在清零和处理非虚树节点的贡献。。。。。。 AC Code:...原创 2018-08-29 09:32:52 · 337 阅读 · 0 评论 -
最小生成树的性质
1) 定义在一棵树里添加一条边,并在产生的圈里删除一条边叫做一次操作。(也就是说换掉一条边并且保证结果是树),则树A和B是无向图的两个生成树,则A可以通过若干次操作变成B。证:把树看作边的集合,如果B中有一条A没有的边,则把这条边加到A上,A产生一个圈中至少有一条是B中没有的边,把这条边删掉,则A仍然是生成树,A,B集合相同的边多了一条,重复这个过程直到A B包含的边相同。注:...转载 2018-08-29 15:28:37 · 1323 阅读 · 0 评论 -
魏(2-sat)(前缀建边优化)
【题目描述】 魏国有n个城镇被分成了k个郡,有m条连接城镇的无向边。 曹操要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都。 【输入格式】 第一行有三个整数,城镇数n(1<=n<=10^6),边数m(0<=m<=10^6),郡数k(1<=k<=n)。 接下来m行,每行有两个整数ai和bi(ai≠bi),表示有一条无向边连接城镇ai和bi...原创 2018-09-09 20:25:26 · 387 阅读 · 0 评论 -
2-sat模板
不需要反向建边,不需要拓扑排序。#include<cstdio>#include<cstring>#include<algorithm>#include<cctype>#define maxn 2000005using namespace std;int n,m;int info[maxn],Prev[maxn<<...原创 2018-09-09 21:18:31 · 195 阅读 · 0 评论