![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
swust_fang
people should change
展开
-
Path HDU6582
补题:跑两个最短路取出最短边跑最小割,全是模版,最短路初值附小了,找了好久的bug#include<stdio.h>#include<string.h>#include<string>#include<iostream>#include<algorithm>#include<math.h>#include&l...原创 2019-07-23 14:37:07 · 113 阅读 · 0 评论 -
E:By Elevator or Stairs? CF595 DP&最短路
题目链接比赛的时候一看,这不是最短路吗,然后敲了一个最短路。然后比赛完发现大家基本都写的dp,我真是个憨憨,dp3行最短路就建个简单的图,dp就是从上一维转化过来就是了优秀的dp://#pragma comment (linker, "/STACK:102400000,102400000")#include<bits/stdc++.h>#include<...原创 2019-10-25 12:21:51 · 185 阅读 · 0 评论 -
Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组
题目链接题意求给区间[L,R]中有少对(i,j)满足i<j且abs(a[i]-a[j])<=k.首先来说暴力的方法就是离散化,然后用树状数组来维护,但是m次询问,m很大,所以说一定会t。这里用到了莫对算法分块来降低复杂度,莫队算法的核心思想是对所有查询进行合理的排序,并将本次查询的结果不断进行修改以得到下次查询的结果AC代码:#include<stdio.h...原创 2019-06-03 20:40:27 · 145 阅读 · 0 评论 -
BZOJ2038 小Z的袜子(hose)
题目链接莫队求区间[L,R]中数字相同的pair数,然后求GCD即可。#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<set>#include<stack...原创 2019-06-04 11:29:35 · 148 阅读 · 0 评论 -
XOR and Favorite Number CF340E 莫队算法
题目链接题意:求给定询问区间[L,R]问有多少连续区间异或值等k,多次询问可以离线。a[i]^a[i+1]^a[i+2]^a[n]=(a[1]^a[2]^a[3]^...^a[i-1])^(a[1]^a[2]^a[3]^...^a[n-1]^a[n])所以可以转化为前缀异或和,问题就变为有多少对a[i]^a[j]=k;所以莫队算法的操作就明了。因为a^b=k则a^k=b,每次记录c...原创 2019-06-04 10:44:55 · 131 阅读 · 0 评论 -
HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接题意:就是给你一堆关系,看能不能排出个确定的顺序做法:1. 拓扑排序+并查集应该很容易想到的一种思路,大于小于建立单向边。对于相等的呢,就把他们缩成一个点。就用并查集缩成一个点就行了入度为0进队列,队列数目>1,有冲突 没有遍历完,信息不完整 不然,输出OK//#pragma comment (linker, "/STACK:102400000,10240...原创 2019-10-27 12:02:57 · 131 阅读 · 0 评论 -
差分约束-图论
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...转载 2019-10-24 13:00:02 · 142 阅读 · 0 评论 -
P1505 [国家集训队]旅游 树链剖分
题目链接题意:树上更新某一点权值,更新两点简单路径权值,查询最大,最小,和思路:思路应该比较简单,就是树链剖分后用线段树维护区间最大最小以及区间和。但是本题比较特殊的是给的边权,转化为点权即可。但是查询或者更新两点x,y之间路径的时候,x,y的lca点的点权对应的边是fathar[lca]--->lca这条边,不属于x->y的简单路径。所以在更新或者查询的时候,当处...原创 2019-10-14 23:43:32 · 124 阅读 · 0 评论 -
HDU - 5876 Sparse Graph 2016 ACM/ICPC 大连网络赛 I题 bfs+set+补图最短路
题目链接题意:给的补图,让你求一个源点到其他点的最短距离,因为图太稠密了, 用dij以及spfa根本不得行,这里只能用一种我不会方法来进行,这里用了bfs的方法以及set来维护,分别set维护一个未跑过的点集以及一个跑不到的点集,具体看代码.#include<stdio.h>#include<string.h>#include<iostream>...原创 2019-05-12 22:19:09 · 104 阅读 · 0 评论 -
网络流24题(2) P4014 分配问题
题目链接题意就是求一个最大流最小费用与最大费用,模板思路:源点到每个点建流为1,距离为0的点 每个点到汇点建流为1,距离为0的点 中间的点按照所给出的距离图来建立流为1的边求最小值加正向距离的边,求最大值加距离的相反数。每次跑一次spfa找出一条S->T的最短距离,将答案加入并且更新流。当spfa到S不能到达T时输出答案。记录一下模板:#include&l...原创 2019-05-22 11:06:39 · 156 阅读 · 0 评论 -
HDU - 5874 Friends and Enemies 完全二分图
题目链接题意理解起来不难,但是因为没有学过,就是一个完全二分图的模型,分成两份从而使边数达到最大,也就是最坏的情况。完全二分图的边数:#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#in...原创 2019-05-13 08:15:18 · 172 阅读 · 0 评论 -
POJ - 2516 Minimum Cost 最小费用最大流
题目链接题意:给n,m,k表示商店数,储存店数,种类数然后给n*k表示每个水果店需求每种种类的数量: 表示成 need[i][j]再给m*k表示每个储存店每种种类数量: 表示成store[i][j]再给k个 n*m的矩阵,表示第k种水果从j储物店运送到i商店的单位价格 cost[p][i][j]思路:一下把图建完是不可能的,就是跑k次费用流,分别以每一种水果独立的跑,每次跑完后...原创 2019-05-22 14:29:58 · 195 阅读 · 0 评论 -
网络流Dinic cur当前弧优化
emmmm看了一晚上,裸的Dinic是跑bfs之后跑n次dfs,每次dfs完后更新流,然后再从源点跑dfs,直到跑不到汇点。但是其实有很多冗余的部分,就是如果是一个十分稠密的图,因为图并不是个树,所以一个点对应的边你会一直重复跑,cur数组的意思我只不太懂,后来才想明白假如你从u->v跑过了之后,跑到u->r你下次再遍历到u点的时候你还会跑u->v这条边吗,在上次寻找增广路的...原创 2019-05-17 12:00:59 · 396 阅读 · 0 评论 -
网络流24题(1) P2756 飞行员配对方案问题
题目链接题意:求一个最大的二分匹配,网络流最大流,自己造一个源点一个汇点,源点0到1~m流为1,m+1~n到汇点n+1流为1,然后就是题目给出的也是流为1,图就是这样的,套dinic一个板子,但是题意要输出路径方案,就是遍历一边所有的边,因为一开始的流都是1,跑完的话用到的边的流就为0了,所以只需要再次判断一下边的流为0,输出即可AC代码:#include<stdio.h>...原创 2019-05-17 14:27:05 · 1619 阅读 · 0 评论 -
poj 3281 Dining 最大流
题目链接一开始的想法就是food-cow-water,但是wa了,看了别人的思路知道每一只牛牛用一条边隔开,然后就达到了限流的效果。所以 食物——>牛牛---->牛牛---->water建完图就成了裸的最大流代码:#include<stdio.h>#include<string.h>#include<iostream>#...原创 2019-05-17 17:37:41 · 149 阅读 · 0 评论 -
POJ - 2387 Til the Cows Come Home
感觉一直写的dij堆优化都是假的,最短路板子spfa+ dij堆优化SPFA#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<set>#include<s...原创 2019-06-06 15:49:35 · 114 阅读 · 0 评论 -
图论基本知识
1.图的表示对于一个图(graph)G=(V,E)由顶点集V(vertex)和边集E(edges)组成。每一条边就是一个点对(u,w),其中u、w属于V。边:单向边,双向边权值:有点权,边权2.一般做法建图+算法3.建边建边有三种方法:1.邻接矩阵 a[maxn][maxn]int main(){ memset(a,0,sizeof(a));...原创 2019-07-14 01:46:18 · 1114 阅读 · 3 评论 -
拓扑排序和并查集
一、什么是拓扑排序在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:每个顶点出现且只出现一次。若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。例如...原创 2019-07-15 13:56:22 · 766 阅读 · 0 评论 -
洛谷P4568 飞行路线 最短路k条免费
题目链接:https://www.luogu.org/problem/P4568不管是k条免费还是半价都可以做~~~两种方法:1.分层建图(但这种方法建图复杂度有点大)就是几条免费建层图,每一层都有对应关系,层与层之间是也是对应关系但是价格免费大概就是这么个意思,分层是常用的思路,k比较小才可以这样,不然会爆掉//#pragma comment (linker...原创 2019-08-09 15:03:40 · 409 阅读 · 0 评论 -
POJ - 1330 Nearest Common Ancestors tanjan_LCA
传送门题意就是题目所谓在线,就是一个一个贼笨且时间太长。#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<set>#include<stack>原创 2019-03-03 15:55:29 · 102 阅读 · 0 评论 -
HDU - 5877 Weak Pair 2016 ACM/ICPC 大连网络赛 J题 dfs+树状数组+离散化
题目链接You are given arootedrootedtree ofNNnodes, labeled from 1 toNN. To theiith node a non-negative valueaiaiis assigned.Anorderedorderedpair of nodes(u,v)(u,v)is said to beweakweakif...原创 2019-05-12 22:09:41 · 145 阅读 · 0 评论 -
POJ 2226 Muddy Fields 最小点覆盖+加建图(好题)
题目链接题目一看就是最小点覆盖,这道题与POJ - 3041 算是一类题,但是3041算是一道十分裸的,因为删除的是整行或者整列,所以图其实是现成的,但是本题的难点就在如何建图。思路:首先还是尽量去建立行与列之间的关系去构造出一条边,因为我们不能将 ※ 以外的点给连接起来,所以二分图的左右的含义不再是简单的行和列,我们需要将行分块以及列分块,就比如离散的思想一样,将每一行分成几块,列也是相...原创 2019-05-10 16:41:41 · 127 阅读 · 0 评论 -
POJ - 3417 Network LCA+树上差分
思路:首先来说,给一个树加一条边肯定要构成一个环,我们假设加了该边后产生的环上的每一条边都累计加一。假设这条边是a到b,那么其实就是原树a->lca(a,b)到b->lca(a,b)上的边累计加一。这个有什么用呢?第一:当原树上某一条边的累加值为0时,也就是这一条边与所有的假边都没有构成环,那么你只要把这一条边删除了,再任意删除一条假边,肯定把图分成两份。答案+M第二:...原创 2019-05-03 17:11:42 · 101 阅读 · 0 评论 -
POJ - 2763 Housewife Wind LCA+dfs序+线段树
q次询问求两个点之间的距离,并且可以随时修改某条边的长度,最短距离可以用lca来求,但是树上维护每一个点到root的距离必须要用dfs序来记录时间戳,在dfs的时候顺便记录每一条边(u,v)对应的v节点,更改某条边时需要更新的是将L[v]~R[v]的值加上这一条边的变化量,然后log查询每个点到root的距离即可。改变这一条边u->v的值,要记录v点,因为其实改变这条边的值改变的是L[v...原创 2019-05-03 15:30:22 · 125 阅读 · 0 评论 -
POJ - 3160 Father Christmas flymouse DAG最长路
又来做这一道缩点的裸题,发现图转化为DAG后明显是一个最长路,那么有没有固定都求法呢,查询资料后发现的确是一种固定的做法。DAG最长路,分为两种固定终点和不固定终点。令dp[i]表示从i顶点出发能获得的最长路径长度,这样所有的d[i]的最大值就是整个DAG的最长路径长度。注意到dp[i]表示从i顶点出发能获得的最长路径长度,如果从i号顶点出发能直接到达顶点j1,j2..jk,而dp[j...原创 2019-04-21 17:49:03 · 106 阅读 · 0 评论 -
poj 2449 Remmarguts' Date 启发式搜索 A*算法
做这个题算是学了学spfa算法,一开始感觉spfa和dij好像;dij找最小点松弛,spfa就是一个一个的松弛,松到不能松。求S到T的第K短路思路:这个算法的思路是从源点S优雅的暴力跑bfs,用优先队列来装跑的过程中点的位置以及跑的距离,优先队列按照来装跑的距离最短的排序,然后随着跑跑的距离就越来越长,那总会跑到T点吧,这个时候你的cnt+1,直到第k次跑到T点的时候就是第K短路了。看着很...原创 2019-03-26 21:21:51 · 103 阅读 · 0 评论 -
HDU - 2586 How far away LCA+tanjar离线算法
传送门题意:求树上的两点的距离,放在一棵树上,而且题目提示只有一条,很明显是这条路线一定会经过他们的最近公共祖先啦,然后就是一个求距离的问题了。如果要采用离线算法的话,就是通过处理所有询问,那么肯定不能单独的求两点之间的距离,我们肯定是要求每一个点到root节点的距离。利用tanjan算法跑一边就可以。设root为根结点,询问a,b两点距离,a,b的公共祖先为lca点。dis数组为每个点到...原创 2019-03-03 20:08:45 · 136 阅读 · 0 评论 -
POJ - 1904 King's Quest 强连通tanjar思想
传送门题意:每个儿子都喜欢许多女孩,问每个渣男儿子最多有几个可以选择备胎。他爹也挺渣。。猛地一看,哇二分匹配,但是想了想输入输出都能卡时间的题目,循环暴力二分匹配必T无疑,在做强连通模块的题所以想了好久也不知道怎么转化。看了大佬的博客,解释的特别好。首先题目是给了一个完备匹配了的,思想如下:设一个渣男为m1,一个小女孩为g1,在所给的完备匹配中m1<->g1,他们俩是肯...原创 2019-03-03 11:39:12 · 148 阅读 · 0 评论 -
HDU - 2767 Proving Equivalences tanjar强连通-DAG性质
传送门很开心,wrong了十多发。因为不认真写错了一个字母,找了一个晚上的bug。题意:给你一个单向图,问你加多少边能够变成一个强连通图,很显然首先是通过tanjar缩点将该图转化为了DAG,看了博客发现了一个很重要的性质,对于某个DAG加多少条边能成为强连通。边数=max(入度为0的点个数,初度为0的点个数)为啥呢?首先我们假设可以自己想象一哈,每一个DAG图可以看作树的元素。设...原创 2019-03-02 10:26:10 · 130 阅读 · 0 评论 -
HDU 4185 Oil Skimming(二分匹配)
Thanks to a certain "green" resources company, there is a new profitable industry of oil skimming. There are large slicks of crude oil floating in the Gulf of Mexico just waiting to be scooped up by e...原创 2019-02-25 20:16:47 · 177 阅读 · 0 评论 -
POJ - 3160 Father Christmas flymouse tanjar缩点构图+dfs
传送门题意:给你一个图,每一个点可以获得一个愉悦值,求能从某一个点出发走能得到的最大愉悦值。路径为单项的,显然不会加上负的。可以通过tanjar缩点从而形成DAG,再跑一个计划搜索即可求出。怎么缩点呢?就是将图跑完,每一个强连通分量就是一个点,该缩点的值就是这个强连通分量中所有值大于0的点的和。ac代码:#include<stdio.h>#include<st...原创 2019-03-01 17:19:59 · 130 阅读 · 0 评论 -
A and B and Lecture Rooms CodeForces - 519E LCA+dfs序
看到这个题的第一个思路就是就是统计以每一个点为根的所有节点个数,然后具体就分情况讨论一下即可。因为刚刚学习了dfs序,这个题就用了dfs序来通过进出时间戳来相减表示其为根的子节点个数。分情况我们假设每个节点为根所有节点的数目为num[u];1.两点同一间教室 输出n2.两点深度一样,这个时候找到x,y的最近祖先LCA 点u,将x,y分别往上跑d[x]-d[u]-1次,及对应...原创 2019-05-04 14:13:18 · 84 阅读 · 0 评论 -
The Shortest Statement CodeForces - 1051F LCA+最短路
太弱了。。。一开始看到题感觉是跑一个最小生成树在上边进行LCA就行了,但是发现过不了样例,然后就是就想到了之前做过类似做法的题目,就是非生成树上的边最多只有21条,然后就那些边记录下来,通过每一条边的两个点跑lca然后取最小值 ll ans=lca(x,y); for(int i=1;i<=k;i++) { ans=min(ans,b[i]....原创 2019-05-04 20:03:23 · 119 阅读 · 0 评论 -
网络流最大流 Dinic算法模板
Dinic算法跟EK算法的优化地方就在于,EK是每次bfs记录前驱结点,然后从汇点找到一条回到源点的路。而dinic是bfs记录深度,不断从源点dfs到汇点并且更新路径流量,直到dfs不到汇点。邻接矩阵代码:#include<stdio.h>#include<string.h>#include<iostream>#include<alg...原创 2019-05-15 13:15:44 · 219 阅读 · 0 评论 -
网络流最大流EK算法板子
刚刚看了个板子,自己能够理解的也不是太深,但是大体上懂什么意思了。#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<set>#include<stack>...原创 2019-05-14 22:27:18 · 219 阅读 · 0 评论 -
POJ - 3177 Redundant Paths 双联通补边
题目链接题意:给出一个多条边问需要加几条变才能变成双连通图。首先要缩点,缩点之后就是变成了一个没有强连通分量的图,这时候只需要统计入度为1的点有多少个,然后通过观察发现将点两两连接即可,answer=(sum+1)/2;代码:#include<stdio.h>#include<string.h>#include<iostream>#inc...原创 2019-05-07 20:39:07 · 92 阅读 · 0 评论 -
POJ - 2446 Chessboard 二分匹配+建图
题目链接题意很简单,是二分匹配的一种常见的题型,问题就在于怎样转换到二分图上来。首先对对n*m-k正常点进行编号,然后遍历查找每一个正常点的上下左右是否能连接(就是判断另个点是否也是正常的),如果是就在两者之间建立双向边.这样一个就变成了一个裸的二分匹配了,对n*m-cnt个点跑匈牙利算法,因为加的是双向边,所以二分匹配的结果是答案的两倍,就是判断结果是否与n*m-k相等即可。坑点:巨...原创 2019-05-09 17:40:34 · 115 阅读 · 0 评论 -
割点 割边 板子 UVA-796
这板子真好#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<set>#include<stack>#include<vector>#in...原创 2019-05-06 22:12:34 · 145 阅读 · 0 评论 -
POJ - 2584 T-Shirt Gumbo 二分多重匹配
题目链接题意:二分多重匹配的裸题,与匈牙利算法不同的之前的男女匹配不同,这个题目的题意是每一个人可以选择多种型号的衣服,并且每一种衣服可以很多人穿,但是每件衣服有数量限制,问最多有多少匹配数。 我们用girl[i][x],表示第i种衣服的第x件的归宿,也就是哪个人穿的 cnt[i]表示第i种衣服已经用的次数 num[i]表示第i种衣服的总数量 核心代码:...原创 2019-05-09 15:46:51 · 113 阅读 · 0 评论 -
POJ - 1986 Distance Queries 倍增求LCA
题意还是很有病的,说了半天后边的方向都没用的,意思就是跟样例一样求两点间的距离,裸的LCA两个点x,y的距离=dis[x]+dis[y]-2*dis[LCA(x,y)];三个点x,y,z的距离=dis[x]+dis[y]+dis[z]-dis(lca(x,y))-dis(lca(y,z))-dis(lca(x,z));倍增的思想是感觉跟RMQ很像,就是首先建数存路径与各节点深度,首先来...原创 2019-04-30 17:23:10 · 148 阅读 · 0 评论