![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
GaoJieVery6
这个作者很懒,什么都没留下…
展开
-
uva 1395 苗条的树 slim tree 最小生成树 Kruskal
暴力枚举,时间复杂度为O(n^2)#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#define INF 0x3f3f3f3fusing namespace std;typedef struct node{ int s; int...原创 2018-07-18 17:07:59 · 205 阅读 · 0 评论 -
uva 247 电话圈 (Floyd求传递闭包)
利用好map,set等工具实现人与编号的双射,然后就是裸的Floyd。 #include <cstdio>#include <map>#include <set>#include <queue>#include <algorithm>#include <iostream>#include &l...原创 2018-03-15 16:32:32 · 182 阅读 · 0 评论 -
hdu 1874 最短路 Dijkstra Folyd
水题,唯一要注意的就是输入路径的时候注意判重。先给出Dijkstra的代码:#include <cstdio>#include <cstdlib>#include <iostream>#include <algorithm>#include <cstring>using namespace std;int n, m...原创 2018-03-14 23:15:32 · 150 阅读 · 0 评论 -
POJ 1860 反向Bellman-Ford
题目大意:我们的城市有几个货币兑换点。让我们假设每一个点都只能兑换专门的两种货币。可以有几个点,专门从事相同货币兑换。每个点都有自己的汇率,外汇汇率的A到B是B的数量你1A。同时各交换点有一些佣金,你要为你的交换操作的总和。在来源货币中总是收取佣金。例如,如果你想换100美元到俄罗斯卢布兑换点,那里的汇率是29.75,而佣金是0.39,你会得到(100 - 0.39)×...原创 2018-03-14 21:35:40 · 182 阅读 · 0 评论 -
hdu 2544 (最短路问题)
直接用Dijkstra,大水题。 #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>bool vis[105];int map[105][105];int sta, end;...原创 2018-03-14 17:25:45 · 144 阅读 · 0 评论 -
hdu 1863 最小生成树+并查集 (Kruskal)
水题,直接上代码。 #include <cstdio>#include <iostream>#include <algorithm>using namespace std;int n, m;int p[1111], u[1111], v[1111], w[1111], r[1111];bool cmp( int i, int ...原创 2018-03-12 21:13:22 · 152 阅读 · 0 评论 -
hdu 1875 最小生成树 Kruskal
#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#include <iostream>#include <vector>using namespace std;const int maxd = 105;int x[...原创 2018-03-15 18:56:35 · 170 阅读 · 0 评论 -
poj 1011 Sticks (dfs+剪枝)
dfs+剪枝的经典好题我想到的剪枝方法只有4个,所以代码比较慢,AC用时297ms。剪枝:1.在组成新棒的时候,如果拿可用的第一根棒去拼新棒但是失败了,就不用再试了,直接返回上一层,因为我们可以看到,每次 调用dfs(cur+1, compelet, len),cur是递增的!即如果用cur = k去拼型棒,但是失败了,如果不剪枝,下一步就要用cur = k+1 去...原创 2018-09-03 20:21:17 · 157 阅读 · 0 评论 -
uva 1001 Say Cheese 最短路 spfa Floyd
首先是建图,把下标为0和下标为n+1的两个点设为起点和终点,把这两个点看成两个半径为0的洞,下标1~n的点为洞,则图上两点的距离为dis = |(xi,yi,zi)-(xj,yj,zj)|-ri-rj;如果dis<0,则边权为0,如果dis>0,则边权为10*dis。有两种算法,一种是spfa+隐式图搜索,ac用时0.000,一种是直接Floyd,ac用时0.010。spfa+...原创 2018-07-21 10:51:49 · 157 阅读 · 0 评论 -
uva 821 Page Hopping (Floyd)
裸的Floyd,或许。。。应该注意一下怎么算平均值?#include <cstdio>#include <iostream>#include <string>#include <map>#define inf 0x3f3f3f3fusing namespace std;int dis[1000][1000];int main(...原创 2018-07-20 23:18:57 · 174 阅读 · 0 评论 -
uva 1151 买还是建 buy or build 最小生成树 Kruskal
#include <cstdio>#include <algorithm>#include <cstdlib>#include <iostream>#include <vector> #define LL long longusing namespace std;typedef struct edge{ int s;...原创 2018-07-18 21:02:14 · 224 阅读 · 0 评论 -
uva 1572 拓扑排序
主要利用了拓扑排序的算法,connect函数的作用是如果正方块的两条边都不为00,且设一条边为Char1+,一条边为Char2-,则Char1+可通过这个正方块和Char2+相连,即有向图上的两点Char1+和Char2+之间有边,然后拓扑排序,如果图内有环,就说明可以组成无限大的结构。#include <iostream>#include <cstring>#i...原创 2018-07-12 20:56:36 · 549 阅读 · 0 评论 -
uva 10048 噪音恐惧症 Audiophobia Floyd算法
ljr的书里说错了,套Floyd算法的模板是,加改为max, min还是min。还有就是ljr的if(d[i][j] < INF && d[k][j] < INF)明显是错的,应该写成if(d[i][k] < INF && d[k][j] < INF)#include <iostream>#include <cs...原创 2018-07-19 11:28:54 · 241 阅读 · 0 评论 -
uva 658 这不是bug,而是特性 二进制转化,(隐式图搜索,最短路,spfa)
主要的难点是把状态转化为二进制表示,下面是二进制的一些用法:①判定某些位置是否为1,如判定2、4位置为1,则转化为判断x|0101是否等于x。②判定某些位置是否为0,如判定2、4位置为0,则转化为判断x&1010是否等于x。③将某些位置转化为1,如2、4位置转化为1,则令x=x|0101。④将某些位置转化为0,如2、4位置转化为0,则令x=x&1010。bef[...原创 2018-07-19 18:37:29 · 185 阅读 · 0 评论 -
hdu 1532 Drainage Ditches 增广路求最大流
裸的Edmonds-Karp,注意初始化就行了。#include <iostream>#include <cstdio>#include <queue>#include <cstdlib>#include <vector>#include <cstring>#define maxn 500#define I...原创 2018-07-20 09:45:45 · 129 阅读 · 0 评论 -
uva 753 A Plug for UNIX 增广路求最大流
用map<string, int>为每一个插座,插头,设备指定一个编号u,先把源点与所有设备,设备与对应的插头,插座与汇点连起来,这些弧的容量为1,然后把转化器加进来,转化器相连的两个东西间加弧,容量为inf,然后用ek模板求最大流。我的源点设为了0,汇点设为了500,(汇点要设大一些,否则可能会与插座插头等的编号重复),inf为0x3f3f3f3f。#include <...原创 2018-07-20 16:30:01 · 133 阅读 · 0 评论 -
uva 1658 Admiral 海军上将 (最小费用最大流+拆点)
因为题目中限制了点只能用一次,所以我们利用拆点法来保证每个点只能用一次(最小费用最大流的算法会保证每条边用一次)下面我们来看一下拆点法是怎么工作的,这是建图的代码for(int i = 2; i < n; i++) ans.AddEdge(i, i+n, 1, 0);ans.AddEdge(1, 1+n, 2, 0);ans.AddEdge(n, n+n, 2, 0...原创 2018-07-20 22:28:45 · 229 阅读 · 0 评论 -
uva 439 bfs 广搜
#include <cstdio>#include <iostream>#include <string>#include <algorithm>#include <cctype>#include <queue>#include <cstring>using namespace std;int v原创 2018-07-15 18:43:07 · 123 阅读 · 0 评论 -
uva 1660 Cable TV Network (最小割最大流)
#include <cstdio>#include <cstdlib>#include <vector>#include <iostream>#include <string>#include <queue> #include <cstring>#include <algorithm&原创 2018-09-10 17:31:41 · 231 阅读 · 0 评论