图论
傻蛋的阿简
我,会骗人的江湖骗子
展开
-
题目序号配给 字典序最小的拓扑排序
来源:长沙理工大学2018区域赛个人选拔赛1 题目: 描述: 在一种竞赛中,题目往往是成套出现的。一道基础题,稍加改动就会使难度上升几个档次。 现在有n道题目,编号为1~n;给出了m个二元组,每个二元组<a,b><a,b>表示 b题目是a题目的加强版,每个题目可能会有多个加强版,加强版的题目也可能会有加强版。 现在要将这n道题目放组成一场比赛,出于人文关怀方面...原创 2018-09-08 21:36:01 · 1170 阅读 · 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 · 156 阅读 · 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 · 131 阅读 · 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 · 156 阅读 · 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 · 134 阅读 · 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 · 114 阅读 · 0 评论 -
POJ 2391 思维建图 + dinic + 二分
和POJ 2112的思路差不多,看见求最大时间的最小值,就是二分算法。然后每个点都有容量,就是拆点建边,自己加个源点和汇点,把每个避雨场拆成两个点,然后连有向图。 #include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace st...原创 2018-08-06 10:12:37 · 143 阅读 · 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 · 102 阅读 · 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 · 201 阅读 · 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 · 118 阅读 · 0 评论 -
POJ 3687 逆向拓扑排序
题目大意: 以小球为模型,实际上就是找满足条件的最小字典序 比如:我们有这样一组数据 1 4 2 4 1 3 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 · 1110 阅读 · 0 评论 -
HDU 6349 最小生成树
传送门:题目 题意: 给定一个图,边是无向边,然后每条边有一个权值和一种颜色,求用特定两种颜色的边组成强连通图,然后问讯k∈[1,m]k∈[1,m]k \in [1,m]边的加权和的最小值。 题解: 题目很好理解,我们只需要分别建两个图,然后分别找两个最小生成树就行了,然后把不是属于最小生成树的边从小到大排个序,最后遍历一下,加到最小生成树的权值和上面去。第一开始套个模板就写完了,但是一直...原创 2018-09-05 19:06:58 · 257 阅读 · 0 评论 -
POJ 3249 拓扑排序 DP
传送门:题目 题意: 给一个图,求两点权值累加和的最大值,点的权值可能为负数。 题解: 我们可以先拓扑排序一下,然后从起点到终点dp一下,记录每个点的答案,然后求答案的最大值 AC代码: #include<iostream> #include<cstring> #include<cstdio> #define debug(x) cout<...原创 2018-09-08 20:20:29 · 469 阅读 · 0 评论 -
Codeforces 770C 拓扑排序 DFS
传送门:题目 题意: 一个人要完成几门课程,但是有的课程有基础课程,要完成基础课程才行,问完成所有课程需要至少完成几门课程,并按照时间先后输出。 题解: 题目一看就是拓扑排序,随便一搞就行了。 AC代码: #include <iostream> #include <cstring> #include <cstdio> #include <a...原创 2018-08-29 00:26:25 · 384 阅读 · 0 评论 -
POJ 2112 思维构图 + dinic算法 + 二分
思维构图参考了这篇博客:参考 dinic的模板参考了这篇博客:参考 数据比较水,EK算法也可以过。 构建完图,套个二分,再套个dinic模板就可以了。这个模板比较好,层次简明,学到的地方 很多。 #include<iostream> #include<cstdio> #include<cstring> #include<vector&g...原创 2018-08-03 15:39:04 · 126 阅读 · 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 · 183 阅读 · 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 · 185 阅读 · 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 · 287 阅读 · 0 评论 -
HDU 1350 最小不相交路径覆盖 匈牙利算法
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #define INF 0x3f3f3f3f using namespace std; const int maxe=300000; const int maxv=550; int cnt; int head[...原创 2018-08-02 22:58:00 · 235 阅读 · 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 · 168 阅读 · 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 · 144 阅读 · 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 · 191 阅读 · 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 · 124 阅读 · 0 评论 -
POJ 1797 Dijkstra
//第一开始想用dijkstra+priority+变形来写 //写到变形的时候发现,变形后的priority就没什么用了 //也许有用,只是我没想到 //最后就用了dijkstra未优化+邻接矩阵加变形来写了 //单纯的模拟,挺简单的 #include<iostream> #include<algorithm> #include<string> #inclu...原创 2018-07-30 08:42:01 · 150 阅读 · 0 评论 -
POJ 2253 Floyd
//青蛙要从一个石头跳到另一个石头上,要求跳的路线中最大跳 //(即某条路线中最远的那一步)的最小值,起始位置在第一个点, //目的位置在第二个点,中间点在紧接着的输入 #include<stdio.h> #include<math.h> #include<iostream> #define N 205 double a[N][N]; int n,x[N],y...原创 2018-07-29 12:19:26 · 130 阅读 · 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 · 199 阅读 · 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 · 131 阅读 · 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 · 197 阅读 · 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 · 129 阅读 · 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 · 163 阅读 · 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 · 135 阅读 · 0 评论 -
POJ 3159 差分约束
把查分约束看出来,这道题其实就是最短路的一个模板题,下面给出两种实现方式: 第一种:Dijkstra+priority_queue+链式前向星(600ms) 第二种:基于stack优化的spfa+链式前向星(纯spfa会TLE,优化后500ms) #include<iostream> #include<cstdio> #include<cstring> ...原创 2018-07-31 21:40:47 · 254 阅读 · 0 评论 -
POJ 1816 思维建图 + dinic + 枚举
思维建图的过程参考了这篇博客:参考 然后就是套Dinic模板,但是题目让我们求的是可以去掉那个顶点,以前求最小割的做法是正向DFS加反向DFS找出最小割,但是DFS找不到点,所以我们只能逐个枚举,反复套dinic模板。代码由详细注释 #include <iostream> #include <cstring> #include <cstdio> #incl...原创 2018-08-05 11:12:38 · 118 阅读 · 0 评论 -
POJ 1062 Dijkstra
枚举区间,有点像A*算法,其实就是暴力稍微优化了一下。 //最短路径——Dijkstra算法 //此题的关键在于等级限制的处理,最好的办法是采用枚举,即假设酋长等级为5,等级限制为2,那么需要枚举等级从3~5,4~6,5~7 //从满足改等级范围的结点组成的子图中用Dijkstra来算出最短路径 //小结,通过枚举的方式可以消除一些图与图之间的限制 #include<iostream&...原创 2018-07-31 14:55:18 · 174 阅读 · 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 · 102 阅读 · 0 评论 -
HDU 4725 思维建图 Dijkstra 空间换时间
建完图直接套个Dijkstra+priority的模板就好了,建图一小时,套模板半分钟。 //这题主要难在建图上,要将层抽象出来成为n个点(对应编号依次为n+1~n+n), //然后层与层建边,点与点建边,层与在该层上的点建边(边长为0),点与相邻层建边(边长为c)。 //ps:这样处理就不用拆点了。不过要注意的是相邻两层必须都要有点才建边(不然会WA,可以参考我贴的数据)。 //然后还有一...原创 2018-07-31 10:59:20 · 170 阅读 · 0 评论 -
HDU 4370 Dijkstra + 非自环正权回路
//先01规划 思维构图 自己是构想不出来 参考了kuangbin的博客 //然后就是找1到n的最短路 这是第一种情况 //然后还有非自环正权回路 这是第二种情况 //本程序采用了Dijkstra找非自环正权回路 //据说spfa也可以找非自环正权回路 #include<iostream> #include<cstring> #include<cstdio> ...原创 2018-07-30 22:48:26 · 206 阅读 · 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 · 169 阅读 · 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 · 135 阅读 · 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 · 180 阅读 · 0 评论