![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
图论
图
xzx9
没事写BUG。
展开
-
Is-A? Has-A? Who Knowz-A?【传递闭包】
题目:Two familiar concepts in object oriented programming are the is-a and has-a relationships. Given two classes A and B, we say that A is-a B if A is a subclass of B; we say A has-a B if one of the f...原创 2020-03-01 11:22:19 · 186 阅读 · 0 评论 -
0 or 1 HDU - 4370【最短路+起点的最小环】
分析:把所给矩阵当作邻接矩阵,由三个限制,可以得到:1.节点 111 的出度为 111,但入度不确定;2.节点 nnn 的入度为 111,但出度不确定;3.其余节点的入度 === 出度; 当节点 111 的入度 =0=0=0,节点 nnn 的出度 =0=0=0,最小值就等于从 1→n1\to n1→n的最短距离; 如果节点 111的入度 =1=1=1,节点 nnn 的出度 =1=1...原创 2020-02-27 21:37:30 · 177 阅读 · 0 评论 -
网络流
最大流:算法:1.Ford_Fulkerson(F_F算法)2.EK算法3.dinic算法EK:基于暴力搜索思想的方法,每次都采用bfs去寻找从源点到汇点的增广路,直到找不到,即表示找到了最大流,每次找到一条增广路(找的时候记得存下路径)后,可以求出这条路上的最小流量,即为这条增广路的流量。最终流量加上他,再把路径上的每一条边的正向边的流量-最小流量,反向边的流量+最小流量。以此不断的...原创 2019-08-09 14:13:59 · 91 阅读 · 0 评论 -
Path HDU - 6582【求最短路所有边+最小割】
题意: 给一个有向图,删除每一条边的代价是边的长度,要求花费最小的代价,使得 1→n1\to n1→n最短路变长,求该最小花费。思路: 要使得最短路变长,那么删除的边一定要破坏原来的最短路。即要先把所有最短路的所有边找出来,通过删除某几条边,使得所有的最短路无效。 如何把最短路的所有边全部找出呢?以 dis1[i]dis1[i]dis1[i] 表示原图中,111 号节点到其余节点的最...原创 2020-02-20 20:47:48 · 137 阅读 · 0 评论 -
CodeForce 1304E 1-Trees and Queries【LCA】
题意: 首先给一棵 nnn 个点的树,然后有 qqq 次的询问,每次询问会向树上点 xxx 和 yyy 之间增加一条边(保证增加的边之前不存在),然后问点 aaa 和 bbb 之间是否存在一条路径长度为 kkk 的路径。每次询问相互独立,即每次增加的边在下一次的询问中不存在。数据范围:3≤n≤105,1≤q≤105,1≤x,y,a,b≤n,x≠y,1≤k≤1093≤ n ≤10^5,1≤q...原创 2020-02-16 14:54:01 · 147 阅读 · 0 评论 -
Roadblocks POJ - 3255【次最短路】
求到某个点 vvv 的次最短路,可认为是到某点 uuu 的最短路,加上 u→vu\rightarrow vu→v 的距离。和最短路的定义相同,因此可以借助于最短路来求解。#include <cstdio>#include <cstring>#include <queue>#include <vector>using namespace ...原创 2020-02-10 17:37:28 · 85 阅读 · 0 评论 -
树上差分
1.点差分:求解问题:给一棵树,和一些路径的起点和终点,求树上的每个点被路径经过的次数。求解步骤: 1.假设路径的起点:sss ,终点:ttt,a=lca(s,t)a=lca(s,t)a=lca(s,t) ,fa[a]fa[a]fa[a] 为 aaa 的父亲节点,pum[x]pum[x]pum[x] 为每个点别路径的经过次数,那么对于每条所给的路径,进行下列操作:pum[s]++; ...原创 2020-02-09 22:29:16 · 97 阅读 · 0 评论 -
树链剖分及应用
定义: 将整棵树剖分为若干条链,使它组合成线性结构,然后用其他的数据结构维护信息。就是一种技巧,为了方便处理问题。 形式:重链剖分,长链剖分等。此处讲述重链剖分。重链剖分: 可以将树上的任意一条路径划分成不超过 lognlognlogn 条连续的链,每条链上的点深度互不相同(即是自底向上的一条链,链上所有点的 LCALCALCA 为链的一个端点)。还能保证划分出的每条链上的节点 DF...原创 2020-02-06 21:41:01 · 421 阅读 · 0 评论 -
树的重心
定义: 找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。 实际上树的重心在树的点分治中有重要的作用, 可以避免N^2的极端复杂度(从退化链的一端出发),保证NlogN的复杂度, 利用树型dp可以很好地求树的重心。先看一道模板题:Balancing Act POJ - 1655分析求解过程: 在 dfsdfsdfs 的过...原创 2020-02-03 21:47:26 · 126 阅读 · 0 评论 -
树的直径及应用
树的直径: 树的直径指树上距离最远的两点间的距离,它在树上问题上有许多应用,往往通过树的直径的性质可以将一个高时间复杂度的解法变为线性求解。树的直径的性质:(1)(1)(1).对树上的任意一点而言,树上与它距离最远的点一定为树的直径的两个端点的其中之一;(2)(2)(2).直径两端点一定是两个叶子节点;(3)(3)(3).对于两棵树,如果第一棵树直径两端点为(u,v)(u,v)(u,v...原创 2020-02-03 19:53:04 · 604 阅读 · 0 评论 -
codeforce 1294F-Three Paths on a Tree【树的直径+多源bfs】
一开始认为根节点和深度最深的节点一定要选择(其实是错的),确定了两个点后枚举第三个点,用倍增求深度最深的点和枚举的点的lca,确定第三个点。正解: 用两次 dfsdfsdfs 求出树的直径的两个端点,即可求得两个点。如果直径长度=n−1=n-1=n−1,那么第三个点可以任意选择。如果不是,用多源 bfsbfsbfs 求出离直径最远的点即为第三个点。#include <bits/s...原创 2020-02-02 19:22:49 · 123 阅读 · 0 评论 -
LCA及应用
定义: 最近公共祖先简称 LCA(Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。性质:1.LCA(u)=uLCA(u)=uLCA(u)=u;2. uuu是vvv的祖先,当且仅当LCA(u,v)=uLCA(u,v)=uLCA(u,v)=u;3. 如果uuu不为vvv的祖先并且vvv不为uuu的祖先,那么 u,vu,vu...原创 2020-01-30 12:39:41 · 400 阅读 · 0 评论 -
Rank of Tetris HDU - 1811【拓扑排序+并查集】
#include <bits/stdc++.h>//基本思路:先用并查集处理 = 关系,归为一个集合,每次对该集合内的元素进行操作时,只对父亲操作即可。//然后利用拓扑排序处理级别关系using namespace std;const int N=1e4+5;int pre[N],degree[N],a[2*N],b[2*N];char c[2*N];vector<...原创 2020-01-22 21:59:01 · 82 阅读 · 0 评论 -
牛客小白月赛21-D.DDoS【拓扑图路径计数,边权无用】
题面:Nancy的男朋友喜欢网络安全!最近,一种新的DDoS——脉冲波悄然来临。其基本原理是利用不同线路服务器的延时,使得Request同时到达目标服务器,以堵塞其它正常的通讯。不妨假设攻击者在1号节点,目标服务器在nn号节点,其余节点(2到n-1号节点)为中继服务器。攻击者可以在任意时间发送一个定向数据包(即规定其经过中继服务器的路线,但不同数据包的路线不能完全相同),目标服务器对这种数...原创 2020-01-19 20:44:03 · 250 阅读 · 0 评论 -
CodeForce 1272 E. Nearest Opposite Parity【多源bfs+反向建图】
#include <bits/stdc++.h>using namespace std;const int inf=0x3f3f3f3f;const int N=2e5+5;vector<int>path[N];int a[N],ans[N],d[N];int n;queue<int>que;void bfs(vector<int> ...原创 2020-01-10 17:07:18 · 181 阅读 · 0 评论 -
Shichikuji and Power Grid CodeForces - 1245D【最小生成树-点权变边权-超级源点】
没有做过这种题目,所以当时就没有做出来,其实即使建立一个超级源点,和每个点相连,以建发电站的费用为边权,其他的点之间的边权就按题目给的算。然后跑一遍最小生成树即可,我用的是prim。注意数据范围(>_<),因为这个一直WA。#include <bits/stdc++.h>//注意数据范围long longusing namespace std;const int N=...原创 2019-12-30 15:12:57 · 134 阅读 · 0 评论 -
拓扑排序及应用
【1】Reward HDU - 2647拓扑排序,反向建边AC代码:#include <bits/stdc++.h>using namespace std;const int N=1e4+5;int reward[N];vector<int>pic[N];int n,m;struct node{ int num,degree;}work[N];...原创 2019-12-29 20:14:41 · 336 阅读 · 0 评论 -
开关问题
poj3279别人的代码,方便学习。#include <iostream>#include <cstdio>#include <fstream>#include <algorithm>#include <cmath>#include <deque>#include <vector>#include...原创 2019-11-15 21:54:57 · 183 阅读 · 0 评论 -
Prime Independence LightOJ - 1356
HK+质因子分解HK是二分图匹配中匈牙利算法的优化,时间复杂度O(sqrt(n)*m)先通过bfs寻找多条增广路,记下每个点到源点的距离(类似于网络流dinic算法),然后用类似于匈牙利算法中dfs的方法,进行匹配。要求图是二分的,并且根据增广路的特性模板:#include<bits/stdc++.h>#define ll long longusing namespace...原创 2019-10-02 21:41:48 · 117 阅读 · 0 评论 -
二分图匹配
1.df原创 2019-08-14 20:10:12 · 89 阅读 · 0 评论 -
确定比赛名次 HDU - 1285
一开始题目意思理解错了,以为要求求出所有选手的排名关系,看了题解后,才知道只要满足题目给的次序即可,没有给的信息,可以不用管。因此,问题就变成了拓扑排序的模板题。所谓的拓扑排序是相对于有向无圈图的顶点的一种排序,如果出现了从u到v的路径,那么排序后,v一定在u的后面。基本操作就是,每次先找到入度为0的点,它肯定是它所在路径上的当前的最前面的点,输出。然后删除它所出发的所有的边,重复上述操作,...原创 2019-08-19 10:29:37 · 86 阅读 · 0 评论