![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM_图论
yiqzq
人生如此复杂,机会多得像稠密图,我们没理由认输。尽管我们走不了最短路,但图仍是连通图,TLE之前,没有一个节点叫失败。
展开
-
Codeforces Round #479 (Div. 3)E. Cyclic Components(用dfs判单环)
题意:给出一些边,问你有多少单个环思路:大概就是用到了dfs遍历环中每个节点,如果每个点的度数都是2的话,那就是符合条件的。方法二:除了可以用dfs可以判断图的连通性,还可以使用并查集判断,只需要在合并操作的时候进行判断即可,就是只对度数为2的点才进行合并操作。#include <bits/stdc++.h>using namespace std;typedef lo...原创 2018-05-07 23:14:11 · 221 阅读 · 0 评论 -
POJ 3041 Asteroids (最小顶点覆盖,匈牙利算法)
原题地址:http://poj.org/problem?id=3041题意:一个n*n的网格中,有k个大小为1*1的小行星,现在可以用激光枪每次消灭一行的小行星或者消灭一列的小行星。问最少需要使用多少次激光枪消灭所有的小行星。思路;简单的二分图匹配求最小顶点覆盖. 最小顶点覆盖=最大匹配. 然后考虑如何建图:我们考虑将横纵坐标看成点,将星球位置看成边,这样就行了#include...原创 2018-08-04 12:08:29 · 234 阅读 · 0 评论 -
HDU 1532 Drainage Ditches (EK算法求最大流模板题)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=1532关于利用vector建图的一些理解 e[u].push_back((edge){v,w,e[v].size()}); e[v].push_back((edge){u,0,e[u].size()-1}); /* 先声明struct edge{int to,cap,rev;/...原创 2018-07-30 23:49:50 · 175 阅读 · 0 评论 -
POJ 2728 Desert King (最小最优比率生成树+01规划的应用)
原题地址:http://poj.org/problem?id=2728题意:题意:有n个点,有三个属性代表每个点在平面上的位置,和它的高度。点与点之间有一个花费:两点的高度差;还有一个长度:两点的距离。现在要让你在这n个点里面弄一个生成树,使得∑cost / ∑dis 最小,问最小的比率是多少。思路:还是推几篇大佬的博客 https://blog.csdn.net/Jianzs_426/...原创 2018-07-31 23:39:40 · 208 阅读 · 0 评论 -
POJ 1659 Frogs' Neighborhood(havel-hakimi定理判可图化)
原题地址:http://poj.org/problem?id=1659 思路;主要是学习如何判断一个度序列是否可图化判定过程: (1)对当前数列排序,使其呈递减 (2)从S[2]S[2]S[2]开始对其后S[1]S[1]S[1]个数字-1 (3)一直循环直到当前序列出现负数(即不是可图的情况)或者当前序列全为0 (可图)时退出。#include <cmath>#inc...原创 2018-08-01 15:52:33 · 245 阅读 · 0 评论 -
POJ 3249 Test for Job (拓扑排序+dp)
原题地址;http://poj.org/problem?id=3249 题意:给出n个点,m条边,每个点都提供了相对的点权值,然后给出相连着的边,问最大利润值。 思路:在拓扑排序的时候同步更新dp数组就行了. 注意:顶点权值可以取负就行了.#include <cmath>#include <iostream>#include <cstdio>...原创 2018-08-01 20:58:51 · 412 阅读 · 0 评论 -
HDU 1814 Peaceful Commission (2-sat求字典序最小)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=1814思路:2-sat的裸题,这题因为是要求输出最小字典序的,所以不能使用拓扑排序求解,只能使用这种暴力染色法求解.关于这题还有详细的ppt解释:https://wenku.baidu.com/view/afd6c436a32d7375a41780f2.html#include <cm...原创 2018-08-02 13:08:19 · 217 阅读 · 0 评论 -
离线tarjan算法求LCA
#include <cmath>#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#include <vector>#include <stack&原创 2018-08-11 21:28:10 · 173 阅读 · 0 评论 -
POJ 3648 Wedding(2-sat输出任一组可行解)
原题地址:http://poj.org/problem?id=3648 例行贴大佬博客 https://blog.sengxian.com/algorithms/2-sat https://aneureka.github.io/2018/05/23/algorithm-diary-2SAT-problem/ https://blog.csdn.net/jarjingx/article/de...原创 2018-08-02 20:39:38 · 275 阅读 · 0 评论 -
POJ 3678 Katu Puzzle (2-sat)
原题地址:http://poj.org/problem?id=3678 题意:给你一些边,每条边有一个值和一个运算符XOR OR AND求是否存在一些点使得所有的边根据这些运算符可以符合条件的权值.一发AC的感觉太爽了!思路:根据题意我我们可以知道,对于逻辑运算,只有两种取值,0或者1.那么问题就很明显的可以理解为2-sat的问题. 这题恶心就在如何建图. 我们需要分别考虑三种运算...原创 2018-08-02 22:43:14 · 202 阅读 · 0 评论 -
Gym - 101853B B - New Assignment (二分图匹配+素数筛)
原题地址:http://codeforces.com/gym/101853/problem/B 题意:有nnn个人,有男生和女生,每一个人都有一个人自己的数字x[i]x[i]x[i],现在要分小组,有333种选择,一个男生,一个女生,一男一女.其中一男一女的要求是两个人的gcdgcdgcd不为111,其中数据保证任意三个数字的gcdgcdgcd为111..现在问你最少需要分几组.思路:网络流...原创 2018-08-18 09:45:37 · 946 阅读 · 0 评论 -
HDU - 5927 F - Auxiliary Set (DFS判LCA)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5927题意: 一棵节点数为n的有根数,根节点为1,一开始所有的点都是重点,接下来有q次询问,每次询问把m个点变为轻点,问你树中还有多少个重点。 重点应该满足的条件为: 1.它本身是重点。 2.它为两个重点的最近公共祖先。 每次询问之后在下次询问前,所有的点都恢复为重点。 思路:...原创 2018-08-22 22:38:09 · 253 阅读 · 0 评论 -
Codeforces Round #398 (Div. 2) C. Garland (dfs)
原题地址:http://codeforces.com/contest/767/problem/C题意:给出一棵树,每个节点有一个权值,现在要将节点分成3份,使得每一份权值都相同.思路:一开始直接dfs从根节点开始搜索,然后WA在了第9组样例,看了大佬的解释才知道,由于负数的存在,使得从根节点开始是行不通的,正确的做法应该是从最低从开始判断.大佬的说法:就是一个点加和与它其中一个子树的加...原创 2018-08-28 12:03:57 · 178 阅读 · 0 评论 -
Codeforces Round #500 (Div. 2) D. Chemical table (思维+图论)
原题地址:http://codeforces.com/contest/1013/problem/D题意:给你一个n∗mn∗mn*m的矩形,一开始有qqq个格子上被标记。对于任意两行两列,如果交汇的四个格子中有三个被标记,那么第4个会被自动标记。问你至少需要手动标记几个格子,使得整个矩形内的格子都被标记。思路:这题一开始真的想不到可以用二分图建图然后求强连通分量来做.具体解释可以看这里h...原创 2018-09-06 19:58:05 · 171 阅读 · 0 评论 -
HDU 5521 Meeting (建图技巧+最短路)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5521题意:给一些集合,集合里的任意两点可以花费某一时间tititi到达有两人分别在111号点和nnn号点两人同时出发,问在哪一点见面花费的时间最短输出最短时间和见面的点(如果有多个点从小到大输出多个)思路:因为集合太大,不可以把每个集合的所有点建边,我们引入m个虚拟的点,每个集合的点连接引入...原创 2018-10-06 14:27:02 · 203 阅读 · 0 评论 -
Gym 101987K TV Show Game (2-sat)
原题地址:https://codeforces.com/gym/101987/attachments题意:有一个字符串长度为kkk,每个位置只包含字符RRR或者BBB,现在有nnn个人,每个人都有333个猜想,问能否构造出一种字符串,使得满足每个人正确的猜想数都大于等于222.思路:一个挺裸的2-sat 的题目,重点在于建图,别的基本都是板子的内容:tarjan缩点+拓扑排序。由于每个人的正...原创 2019-09-21 20:49:36 · 875 阅读 · 0 评论 -
CodeForces 1205B Shortest Cycle(floyd 找最小环)
原题地址:https://codeforces.com/problemset/problem/1205/B题意:给定N个点,每个点有一个权值a[x],如果a[u]&a[v] != 0,那么就可以在(u,v)之间连一条边,求最后图的最小环思路:按位考虑,如果某一位上为1的数字有3个及以上,那么最小环就一定是3.否则的话就要暴力建图去找最小环.这里可以利用floyd去找最小环.#...原创 2019-09-22 17:46:46 · 177 阅读 · 0 评论 -
二分图匹配相关概念
最大匹配数:最大匹配的匹配边的数目最小点覆盖数:选取最少的点,使任意一条边至少有一个端点被选择最大独立数:选取最多的点,使任意所选两点均不相连最小路径覆盖数:对于一个 DAG(有向无环图),选取最少条路径,使得每个顶点属于且仅属于一条路径。路径长可以为 0(即单个点)。定理1:最大匹配数 = 最小点覆盖数(这是 Konig 定理)定理2:最大匹配数 = 最大独立数定理3:最...原创 2018-08-04 10:14:38 · 183 阅读 · 0 评论 -
POJ 2499 Remmarguts' Date (求第k短路模板题)
原题地址:http://poj.org/problem?id=2449#include <cmath>#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#include <ve...原创 2018-07-30 18:54:10 · 204 阅读 · 0 评论 -
ZOJ 2532 Internship (网络流求最小割)
原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1532思路:还不是特别懂,留坑,待补#include &lt;cmath&gt;#include &lt;iostream&gt;#include &lt;cstdio&gt;#include &lt;algorithm&gt;#incl原创 2018-08-03 16:52:07 · 192 阅读 · 0 评论 -
hdu 4738 Caocao's Bridges(无向图求桥)
题意:曹操在长江上建立了一些点,点之间有一些边连着。如果这些点构成的无向图变成了连通图,那么曹操就无敌了。刘备为了防止曹操变得无敌,就打算去摧毁连接曹操的点的桥。但是诸葛亮把所有炸弹都带走了,只留下一枚给刘备。所以刘备只能炸一条桥。 题目给出n,m。表示有n个点,m条桥。 接下来的m行每行给出a,b,c,表示a点和b点之间有一条桥,而且曹操派了c个人去守卫这条桥。 现在问刘备最少派多少人去炸桥原创 2018-05-05 19:31:59 · 276 阅读 · 0 评论 -
poj1144 Network (求无向图的割点数,裸题)
#include <cstring >#include <iostream>#include <cstdio>#include <algorithm>#include <vector>using namespace std;const int maxn = 105;/*割点两大条件1.如果是根节点,那么如果有>=2个子节点,那么是个割点原创 2018-05-05 13:24:05 · 268 阅读 · 0 评论 -
hdu 1285 (简单的拓扑排序)
题意:给出一些队伍之间的胜负关系,让你输出排名的先后顺序,如果排名相同则字典序小的先输出。思路:这是一道裸的拓扑排序的题目。主要用来测一下板子。 下面给出几种不同的版本 判断的第一种方法:我们可以知道当前入度为0的节点一定是根节点,这时我们只要将其输出,并且拆除所有与根节点相连的边就行了(拆的时候别忘了同时更新节点的入度值)。用邻接矩阵存储的#include <cstr...原创 2018-05-04 17:35:08 · 404 阅读 · 0 评论 -
图论之路径还原
假设prv[i]=j,表示i的前驱节点是j,即i是由j走过来的,每次dij更新操作的时候,就同时更新prv。 然后根据挑战上所述,floyd 和bellman算法也可以用这种方法求解。vector<int> path;int t = end; //这里end代表终点for (; t != -1; t = prv[t]) //每次将当前的位置加入path直到到尽头-1,且-1原创 2018-04-12 16:58:34 · 317 阅读 · 0 评论 -
uva10006(快速幂取模)
题目本身没有任何难度,就当作是快速幂的入门题了 好像题目数据很多,需要打表#include <bits/stdc++.h>typedef long long ll;using namespace std;ll n;bool vis[65005];bool d[65005];ll Pow(ll base, ll n, ll mod) { ll res = 1; while(原创 2018-04-09 20:18:38 · 225 阅读 · 0 评论 -
L2-001. 紧急救援
//这个题由于要处理点集,因此并不能进行预处理,也就是说不能在一开始就将任何vis化为1#include <bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3fint n,m,s,d;int w[505],dis[505],vis[505],e[505][505],pre[505],num[505],weight[505];vo原创 2018-03-30 21:48:15 · 329 阅读 · 0 评论 -
RMQ模板(倍增法)
#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>#include <math.h>#include <ctype.h>#include <map>#include <set>#include <vector>#include <queue>#define inf 0x3f3f3原创 2018-03-14 16:29:19 · 266 阅读 · 0 评论 -
lca离线模板
#include <cstring>#include <cstdio>#include <algorithm>#include <cstdlib>#include <cmath>using namespace std;const int N=1e5*4;struct Edge{ int cnt,x[N],y[N],z[N],nxt[N],fst[N]; void set原创 2018-03-13 23:45:07 · 195 阅读 · 0 评论 -
树和图的一些概念
稠密图用 邻接矩阵存储 稀疏图用 邻接表存储 有很少条边或弧的图称为稀疏图,反之称为稠密图,这里的概念是相对而言的。 在无向图G中,如果从顶点v到顶点v’有路径,则称v和v’是连通的。 如果对于图中任意两个顶点vi、vj ∈E, vi,和vj都是连通的,则称G是连通图。稠密图我建图是任意两点均有路径,对角线都是0。。求得的最短路所有起点都是1,终点都是n(矩阵的大小) 下面是...转载 2018-01-26 12:56:21 · 1571 阅读 · 0 评论 -
欧拉回路
无向图的欧拉回路:所有点的度数是偶数 无向图的欧拉通路:度数为奇数的点有2个或者0个无向图欧拉回路模板/*条件1.联通,可以用并查集来判断,这份代码没有判断条件2.所有点的度数都是偶数*/#include <bits/stdc++.h>using namespace std;const int maxn = 1005;int degree[maxn];struct node {原创 2018-05-10 14:31:51 · 177 阅读 · 0 评论 -
洛谷 P3387(tarjan缩点+求最长路)
强连通: 在一个有向图G里,设两个点 a b 发现,由a有一条路可以走到b,由b又有一条路可以走到a,我们就叫这两个顶点(a,b)强连通。 强连通图: 如果 在一个有向图G中,每两个点都强连通,我们就叫这个图,强连通图。 强连通分量:在一个有向图G中,有一个子图,这个子图每2个点都满足强连通,我们就叫这个子图叫做 强连通分量 [分量::把一个向量分解成几个方向的向量的和,那些方向上的向量就叫做...原创 2018-06-05 21:30:12 · 367 阅读 · 0 评论 -
Codeforces Round #490 (Div. 3) E. Reachability from the Capital (tarjan 缩点)
原题地址:http://codeforces.com/contest/999/problem/E 题意:给出一个有向图,然后给出一个中心点s,询问你添加最少几条边以后,使得中心点s可以到达其他任何一个点。 思路:这题有两种做法。做法一:使用tarjan缩点来做。求出这个有向图的所有强连通分量之后重新构图。对于重新构造的图来说,如果新节点的入度是0,那么最优方法就是直接从s点向新节点添加一条...原创 2018-07-08 21:44:58 · 210 阅读 · 0 评论 -
求解关键路径代码
//博主自己的板子,有问题可以私聊#include &lt;bits/stdc++.h&gt;using namespace std;const int maxn = 1e3 + 5;const int inf = 0x3f3f3f3f;int n, m;int mp[maxn][maxn];int ve[maxn], vl[maxn], ee[maxn], el[maxn];i...原创 2018-06-27 00:31:28 · 616 阅读 · 0 评论 -
hdu 4109 (求解关键路径长度)
关于求解哪些边是关键路径,可以参考我的这篇博客这题只是上面这个代码的精简版,只求了长度,没求哪些是关键路径,所以只贴了个代码:#include <bits/stdc++.h>using namespace std;const int maxn = 1e3 + 5;const int inf = 0x3f3f3f3f;int n, m;int mp[maxn][m...原创 2018-06-27 01:01:28 · 768 阅读 · 0 评论 -
hihoCoder 1050 树中的最长路 (求树的直径)
原题地址:https://hihocoder.com/problemset/problem/1050树的直径的概念:树的最长简单路 思路:先从任意一点开始进行一个bfs,搜索到的最远的点p肯定是树的直径中的一个点。然后只要再从p点开始再进行一次搜索,这回搜索到的最远点q就是树的直径中的另外一个点。那么很明显pq之间的距离就是树的直径的大小。#include &lt;cstring&gt;...原创 2018-07-14 18:49:39 · 227 阅读 · 0 评论 -
POJ 3660 Cow Contest(floyd的小技巧)
原题地址;http://poj.org/problem?id=3660题意:n个牛进行比赛,现已知m个关系, 牛u可以胜过牛v。 问最后可以确定排名位数的有几个牛思路:我们可以转化一下思路,如果一头牛可以确定名次,那么名次比他高的牛和名次比他低的牛的数量相加是n-1.那么我们就可以将原问题转化为一个图论问题,.如果a赢了b,那就从a连一条边到b.最后只要一头一头牛判断就行了.#in...原创 2018-07-28 18:29:20 · 94 阅读 · 0 评论 -
Gym 102059D Dumae(拓扑排序+优先队列贪心)
原题地址:https://codeforces.com/gym/102059/problem/D题意:nnn 个人要排成一排,每个人想要站的位置都是一个区间,同时还有一些形如“xxx必须站在yyy左边”的限制,构造一组方案。思路:如果只有后面的xxx在yyy的前面的限制,那么这就是一个简单的拓扑排序。但是这里还有区间的限制。考入如果有xxx点的范围是[l1,r1][l_1,r_1][l1,...原创 2019-09-26 22:24:01 · 307 阅读 · 0 评论