图论
_ 泛白
QQ1204731545
展开
-
CodeForces 1303F - Number of Components(删边并查集)
题意一个n∗mn*mn∗m的地图,一开始全是颜色0.Q次询问,每次把(x,y)(x,y)(x,y)的格子变成颜色ccc。问每次操作完之后有多少个同色联通块。保证cic_ici以单调不降的顺序给出,且保证ci≤max(1000,2e6/(nm))c_i\le max(1000,2e6/(nm))ci≤max(1000,2e6/(nm))解题思路可以按照不同的颜色分别统计。那么修改一个位...原创 2020-02-14 23:01:57 · 487 阅读 · 0 评论 -
Codeforces 1253F - Cheap Robot(最短路+并查集/Kruskal树)
题目大意n点m边无向图,k个关键点,q个询问(a,b)。问从a到b需要的最小容量c是多少。保证a,b是关键点。你能量池最多有c能量,每次走边消耗边权那么多的能量。在关键点会补满能量。每次询问需要的最少能量。k,n≤1e5,q,m≤3e5k,n\le1e5,q,m\le 3e5k,n≤1e5,q,m≤3e5解题思路以所有关键点为源求一遍多源最短路,然后对于一个点uuu,如果当前能量x<...原创 2020-02-11 20:28:38 · 316 阅读 · 0 评论 -
Codeforces Round #616 C - Prefix Enlightenment(带权并查集维护二分图)
题意给你nnn个灯的开关状态,再给你kkk个子集。选择一个子集将会按下子集中所有数字对应的开关。mim_imi表示前iii个灯全部开启最少要选取多少个子集,求出所有的mi(i∈[1,n])m_i(i\in [1,n])mi(i∈[1,n])一些限制:任意三个子集的交集都是空集。一定存在一种选取方式使得所有的灯都亮着n,k≤3e5n,k\le 3e5n,k≤3e5解题思路:先观...原创 2020-02-03 12:43:02 · 320 阅读 · 0 评论 -
2019 ICPC 南昌 Regional A. 9102(离线处理 && 带删并查集)
题意:需要维护一个可持久化的带删并查集。解题思路:可持久化数据结构如果没有强制在线就尝试离线建一颗时间顺序的树,然后直接处理,解决完一个儿子再回溯操作就行了。因为要回溯所以这里的并查集并没有路径压缩而是采用启发式合并。#include<bits/stdc++.h>using namespace std;const int maxn = 1e6 + 50;struct no...原创 2020-01-28 19:13:22 · 649 阅读 · 0 评论 -
一句话网络流(EK,Dinic,最小费最大流,(最大/最小)可行流,最小费用可行流)
EK算法求最大流:BFS找增广路增广直到无法增广复杂度:O(V*E^2)核心代码(邻接表存图):(一开始学最大流的时候写的代码,非常丑)int pre[maxn];int vis[maxn]={0};bool bfs(){//bfs求路径 for(int i = 0;i <= n+1;++i) vis[i] = 0; queue<int> q;q.push(0);...原创 2019-05-09 22:44:21 · 1849 阅读 · 0 评论 -
CCF201812-5 管道清洁 题解(最小费可行流)
无汇源的最小费可行流。需要清洁的管道下界为1,然后建图直接跑最小费用流。AC代码:#include<iostream>#include<queue>#include<string.h>using namespace std;const int maxn = 233;const int inf = 0x3f3f3f3f;struct node{...原创 2019-05-09 21:03:40 · 1515 阅读 · 1 评论 -
ZOJ-4097 Rescue the Princess(Tarjan边双连通缩点 + LCA)
题目链接题目大意:给你一个图(不保证连通,可能存在重边),多次查询,一次查询给出三个点u,v,w,(可能会重合),求有没有两条路径使得v到达u,w到达u,且这两条路径不重合。 点的数量 和 查询次数都是1e5级别。题解:先对原图进行边双连通缩点,判断的时候分为以下情况:1.三个点都在同一个边双连通里,那么肯定存在这样两条不相交路径,想一下边双连通分量的性质就明白了2.两个起点v,w在同...原创 2019-04-18 21:04:41 · 255 阅读 · 2 评论 -
二分图最大匹配-HK算法的简单理解和实现
求一个二分图的最大匹配,朴实的匈牙利算法的复杂度为O (VE),优点是代码量很少,而且顶点数目在1000以内的时候表现不错。bool dfs(int u,int tot){ for(int i = head[u];i != -1; i = e[i].nxt){ int v= e[i].v; if(vis[v] == tot) continue; vis[v] = tot; if...原创 2019-04-08 22:46:48 · 3869 阅读 · 6 评论 -
Tarjan算法的练习
基本介绍:Tarjan算法其实就是一种带技巧的DFS,比普通的dfs多了两个标记:dfn和low,实质上还是一种DFS。Tarjan算法能做什么?求有向图的强连通分量求无向图的割点求无向图的桥(割边)求LCA(最近公共祖先)网上有很多的tarjan算法详解,这里就不重复造轮子了。刚学tarjan算法的时候觉得很神奇,花了很长时间去消化,但是不去用慢慢就又忘了,所以这里贴出一些ta...原创 2019-04-03 23:31:48 · 499 阅读 · 2 评论 -
朱刘算法求最小树形图
最近刷到一道题,题意是求有向图的最小生成树,一看题意就想用prime写,结果听取wa声一片,搜了一下题解才知道要用朱刘算法写。学了一下朱刘算法。https://www.cnblogs.com/xzxl/p/7243466.html学的时候,这篇博客的缩点部分看了好一会它的描述觉得好绕,其他的教程又一笔带过,在这里就补充一下自己的理解。为什么prime会错呢?这张图用prime算得12,取...原创 2019-03-29 23:06:14 · 311 阅读 · 0 评论