图论
傻蛋的阿简
我,会骗人的江湖骗子
展开
-
题目序号配给 字典序最小的拓扑排序
来源:长沙理工大学2018区域赛个人选拔赛1题目:描述: 在一种竞赛中,题目往往是成套出现的。一道基础题,稍加改动就会使难度上升几个档次。 现在有n道题目,编号为1~n;给出了m个二元组,每个二元组<a,b><a,b>表示 b题目是a题目的加强版,每个题目可能会有多个加强版,加强版的题目也可能会有加强版。 现在要将这n道题目放组成一场比赛,出于人文关怀方面...原创 2018-09-08 21:36:01 · 1198 阅读 · 0 评论 -
POJ 2553 Tarjan 统计出度为0的强连通块
#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int maxv=5010;const int maxe=1000000;int Index,top,scc,cnt;bool Instack[maxv];int head[maxv],Low...原创 2018-08-02 12:14:02 · 181 阅读 · 0 评论 -
POJ 1659 Havel-Hakimi定理
Havel-Hakimi定理:可以由度序列判断是否能构成简单图,并输出该简单图#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxv=110;struct Node { i...原创 2018-08-02 10:48:31 · 151 阅读 · 0 评论 -
POJ 1236 Tarjan 缩点 统计出入度为0的强联通块
#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int maxv=20010;const int maxe=50010;int Index,top,scc,cnt;bool Instack[maxv];int head[maxv],Low[...原创 2018-08-02 10:05:13 · 176 阅读 · 0 评论 -
POJ 2728 最小比率生成树 Prim 二分
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define eps 1e-5#define INF 1e18#define Distance(i,j) (sqrt((edge[i].x-edge[j...原创 2018-08-01 21:16:27 · 149 阅读 · 0 评论 -
POJ 3522 kruskal 枚举 贪心
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;const int maxv=110;const int maxe=9000;const int INF=0x3f3f3f3f;int pre[maxv]...原创 2018-08-01 17:29:09 · 132 阅读 · 0 评论 -
POJ 2391 思维建图 + dinic + 二分
和POJ 2112的思路差不多,看见求最大时间的最小值,就是二分算法。然后每个点都有容量,就是拆点建边,自己加个源点和汇点,把每个避雨场拆成两个点,然后连有向图。#include <iostream>#include <cstring>#include <cstdio>#include <queue>using namespace st...原创 2018-08-06 10:12:37 · 165 阅读 · 0 评论 -
HDU 1232 并查集
#include<iostream>#include<cstring>#include<cstdio>using namespace std;int pre[1050];bool root[1050];int Find(int x){//找到根节点 int r=x; while(r!=pre[r]) r=pre[r]...原创 2018-08-01 15:26:02 · 116 阅读 · 0 评论 -
POJ 3463 Dijkstra 最短路 次短路 计数统计
#include<iostream>#include<cstdio>#include<queue>#include<cstring>#include<queue>using namespace std;const int maxe=20010;const int maxv=1010;const int INF=0x3f3...原创 2018-08-01 14:34:18 · 229 阅读 · 0 评论 -
POJ 2186 Tarjan 统计唯一出度为0的强联通块包含的结点数
#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int maxv=10010;const int maxe=50010;int Index,top,scc,cnt;bool Instack[maxv];int head[maxv],Low[...原创 2018-08-02 12:51:02 · 134 阅读 · 0 评论 -
POJ 3687 逆向拓扑排序
题目大意:以小球为模型,实际上就是找满足条件的最小字典序比如:我们有这样一组数据14 24 13 2意思就是1组测试样例,4代表一个序列,[1,2,3,4],我们要做的就是调整下次序,使它满足两个条件。处于4号位的数字要比处于1号位的数字要小,处于3号位的数字要比处在2号位的数字小。我们随便一想,就有两组序列[4,3,2,1] [2,4,3,1].然后题目说让我们...原创 2018-08-02 19:43:10 · 1139 阅读 · 0 评论 -
HDU 6349 最小生成树
传送门:题目题意:给定一个图,边是无向边,然后每条边有一个权值和一种颜色,求用特定两种颜色的边组成强连通图,然后问讯k∈[1,m]k∈[1,m]k \in [1,m]边的加权和的最小值。题解:题目很好理解,我们只需要分别建两个图,然后分别找两个最小生成树就行了,然后把不是属于最小生成树的边从小到大排个序,最后遍历一下,加到最小生成树的权值和上面去。第一开始套个模板就写完了,但是一直...原创 2018-09-05 19:06:58 · 275 阅读 · 0 评论 -
POJ 3249 拓扑排序 DP
传送门:题目题意:给一个图,求两点权值累加和的最大值,点的权值可能为负数。题解:我们可以先拓扑排序一下,然后从起点到终点dp一下,记录每个点的答案,然后求答案的最大值AC代码:#include<iostream>#include<cstring>#include<cstdio>#define debug(x) cout<...原创 2018-09-08 20:20:29 · 492 阅读 · 0 评论 -
Codeforces 770C 拓扑排序 DFS
传送门:题目题意:一个人要完成几门课程,但是有的课程有基础课程,要完成基础课程才行,问完成所有课程需要至少完成几门课程,并按照时间先后输出。题解:题目一看就是拓扑排序,随便一搞就行了。AC代码:#include <iostream>#include <cstring>#include <cstdio>#include <a...原创 2018-08-29 00:26:25 · 406 阅读 · 0 评论 -
POJ 2112 思维构图 + dinic算法 + 二分
思维构图参考了这篇博客:参考 dinic的模板参考了这篇博客:参考 数据比较水,EK算法也可以过。 构建完图,套个二分,再套个dinic模板就可以了。这个模板比较好,层次简明,学到的地方 很多。#include<iostream>#include<cstdio>#include<cstring>#include<vector&g...原创 2018-08-03 15:39:04 · 166 阅读 · 0 评论 -
POJ 1273 EK算法
纯模板题,套个模板就好了#include<iostream>#include<queue>#include<cstring>#include<cstdio>using namespace std;const int maxn=205;const int inf=0x7fffffff;int r[maxn][maxn]; //残留...原创 2018-08-03 11:02:42 · 201 阅读 · 0 评论 -
POJ 2226 思维构建二分图 最小不相交路径覆盖 匈牙利算法
思维构建二分图的思路参考了这篇博客:参考#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxv=1010;int LN,RN,l,r;bool visit[maxv];char mmap[maxv][maxv];int lin...原创 2018-08-03 10:13:21 · 208 阅读 · 0 评论 -
POJ 3041 最小不相交路径覆盖 匈牙利算法
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxv=510;int n,m,v1,v2,ret;bool mmap[maxv][maxv],visit[maxv];int link[maxv];bool dfs(int x){...原创 2018-08-03 09:00:39 · 303 阅读 · 0 评论 -
HDU 1350 最小不相交路径覆盖 匈牙利算法
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#define INF 0x3f3f3f3fusing namespace std;const int maxe=300000;const int maxv=550;int cnt;int head[...原创 2018-08-02 22:58:00 · 253 阅读 · 0 评论 -
POJ 3169 差分约束 spfa写法
建模的时候考虑最短路 最长路问题,此题两种情况都包含,我们把最长路转化为最短路 输出的时候判断 解的存在性(三种情况)/**喜欢dis[j]-dis[i]<=len(最短路)不喜欢d[j]-d[i]>=len(最长路)-->优化d[i]-d[j]<=-len(最短路)*/#include<iostream>#include<cstdio...原创 2018-08-01 09:41:35 · 185 阅读 · 0 评论 -
LightOJ 1074 基于stack优化的spfa 处理负权回路问题
#include<iostream>#include<cstring>#include<cstdio>#include<stack>#include<queue>using namespace std;const int maxv=210;const int maxe=210*210;const int INF=0x3f...原创 2018-07-31 23:50:44 · 160 阅读 · 0 评论 -
POJ 1860 Bellman-Ford反向 求正权回路
//题目的意思就是找正权回路//我们知道Bellman-Ford可以标记负权回路//我们不妨把Belliman-Ford的不等式反写//就可以标记正权回路了#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std...原创 2018-07-30 14:34:28 · 209 阅读 · 0 评论 -
POJ 3268 Dijkstra+priority
//两个Dijkstra,虽然是多元最短路径,但是不能//用Floyd,会TLE,模板题#include<iostream>#include<queue>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int ma...原创 2018-07-30 09:58:51 · 143 阅读 · 0 评论 -
POJ 1797 Dijkstra
//第一开始想用dijkstra+priority+变形来写//写到变形的时候发现,变形后的priority就没什么用了//也许有用,只是我没想到//最后就用了dijkstra未优化+邻接矩阵加变形来写了//单纯的模拟,挺简单的#include<iostream>#include<algorithm>#include<string>#inclu...原创 2018-07-30 08:42:01 · 174 阅读 · 0 评论 -
POJ 2253 Floyd
//青蛙要从一个石头跳到另一个石头上,要求跳的路线中最大跳//(即某条路线中最远的那一步)的最小值,起始位置在第一个点,//目的位置在第二个点,中间点在紧接着的输入#include<stdio.h>#include<math.h>#include<iostream>#define N 205double a[N][N];int n,x[N],y...原创 2018-07-29 12:19:26 · 154 阅读 · 0 评论 -
POJ 2387 spfa
纯模板题,套个链式前向星和spfa模板就过了#include<iostream>#include<cstring>#include<queue>#include<cstdio>using namespace std;const int maxn=4010;const int INF=0x3f3f3f3f;struct Node ...原创 2018-07-29 00:53:34 · 221 阅读 · 0 评论 -
POJ 2449 spfa+基于A start algorithm 实现的k短路算法
#include<iostream>#include<cstdio>#include<queue>#include<cstring>using namespace std;const int INF=0x3f3f3f3f;const int maxn=100010;struct Edge { int to,val,next;...原创 2018-07-28 23:59:51 · 142 阅读 · 0 评论 -
BZOJ 1085 骑士精神 A star algorithm DFS
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int mmap[5][5]= { {1,1,1,1,1}, {0,1,1,1,1}, {0,0,2,1,1}, {0,0,0,0,1}, {0,0,0,0...原创 2018-07-28 20:22:13 · 215 阅读 · 0 评论 -
POJ 3259 Bellman-Ford
//Bellman-Ford的模板题#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;const int maxv=510;const int maxe=5210;const int INF=0x3f3f...原创 2018-07-30 15:26:27 · 146 阅读 · 0 评论 -
ZOJ 2532 求最小割 + Dinic
Dinic模板找到残余网络 + 两个dfs找正流网络和负流网络#include <iostream>#include<cstdio>#include<cstring>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 200;const int maxe = 5000...原创 2018-08-03 22:56:52 · 185 阅读 · 0 评论 -
POJ 1502 Dijkstra 矩阵存图 priority
//比较好的一个模板题,原来的Dijkstra + priority一直用邻接前向星实现//这道题尝试用矩阵实现,也成功了#include<iostream>#include<cstring>#include<cstdio>#include<queue>#include<algorithm>using namespace ...原创 2018-07-30 17:09:55 · 156 阅读 · 0 评论 -
POJ 3159 差分约束
把查分约束看出来,这道题其实就是最短路的一个模板题,下面给出两种实现方式:第一种:Dijkstra+priority_queue+链式前向星(600ms)第二种:基于stack优化的spfa+链式前向星(纯spfa会TLE,优化后500ms)#include<iostream>#include<cstdio>#include<cstring>...原创 2018-07-31 21:40:47 · 285 阅读 · 0 评论 -
POJ 1816 思维建图 + dinic + 枚举
思维建图的过程参考了这篇博客:参考然后就是套Dinic模板,但是题目让我们求的是可以去掉那个顶点,以前求最小割的做法是正向DFS加反向DFS找出最小割,但是DFS找不到点,所以我们只能逐个枚举,反复套dinic模板。代码由详细注释#include <iostream>#include <cstring>#include <cstdio>#incl...原创 2018-08-05 11:12:38 · 133 阅读 · 0 评论 -
POJ 1062 Dijkstra
枚举区间,有点像A*算法,其实就是暴力稍微优化了一下。//最短路径——Dijkstra算法//此题的关键在于等级限制的处理,最好的办法是采用枚举,即假设酋长等级为5,等级限制为2,那么需要枚举等级从3~5,4~6,5~7//从满足改等级范围的结点组成的子图中用Dijkstra来算出最短路径//小结,通过枚举的方式可以消除一些图与图之间的限制#include<iostream&...原创 2018-07-31 14:55:18 · 193 阅读 · 0 评论 -
POJ 2502 思维建图 Dijkstra
//思维建图+Dijkstra模板#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>using namespace std;const double INF=1...原创 2018-07-31 13:50:14 · 121 阅读 · 0 评论 -
HDU 4725 思维建图 Dijkstra 空间换时间
建完图直接套个Dijkstra+priority的模板就好了,建图一小时,套模板半分钟。//这题主要难在建图上,要将层抽象出来成为n个点(对应编号依次为n+1~n+n),//然后层与层建边,点与点建边,层与在该层上的点建边(边长为0),点与相邻层建边(边长为c)。//ps:这样处理就不用拆点了。不过要注意的是相邻两层必须都要有点才建边(不然会WA,可以参考我贴的数据)。//然后还有一...原创 2018-07-31 10:59:20 · 190 阅读 · 0 评论 -
HDU 4370 Dijkstra + 非自环正权回路
//先01规划 思维构图 自己是构想不出来 参考了kuangbin的博客//然后就是找1到n的最短路 这是第一种情况//然后还有非自环正权回路 这是第二种情况//本程序采用了Dijkstra找非自环正权回路//据说spfa也可以找非自环正权回路#include<iostream>#include<cstring>#include<cstdio>...原创 2018-07-30 22:48:26 · 228 阅读 · 0 评论 -
POJ 2240 Bellman-Ford 求正权环
#include<iostream>//AC#include<cstring>#include<algorithm>#include<cstdio>#include<map>using namespace std;const int maxe=2500;const int maxv=50;map<string,in...原创 2018-07-30 19:24:23 · 190 阅读 · 0 评论 -
POJ 3660 Floyd 传递闭包
//Floyd 传递闭包 模板题#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxv=110;bool mmap[maxv][maxv];int main(void) {#ifndef ONLINE_JUDGE freo...原创 2018-07-30 17:45:52 · 156 阅读 · 0 评论 -
POJ 3013 Dijkstra+priority_queue
//时间限制3kms,第一开始用ios::sync_with_stdio(false)//一直TLE,后来用scanf竟然590ms就过了。。。#include<iostream>#include<queue>#include<cstdio>#include<cstring>using namespace std;const int ...原创 2018-07-28 15:31:40 · 206 阅读 · 0 评论