
图论
acm_lkl
这个作者很懒,什么都没留下…
展开
-
dijkstra学习之--基础题
今天做了两道dijkstra算法的基础题;题目都没有什么难度,基本上就是原创 2014-07-29 23:12:37 · 1070 阅读 · 0 评论 -
CSUOJ--1633 Landline Telephone Network
其实就是一道最小生成树的题目.我们只需要将坏点排除在外,然后对其它点做一次最小生成树,然后在将坏点连接到这颗生成树上(每次都选代价最小的点).当然如果最后不是所有的点都连接到一起,就是impossible了. 还有一种情况需要特判,就是如果一共只有两个点,并且都是坏点,这种情况也是合法的.代码如下:#include<iostream>#include<cstdio>#include<algor原创 2015-05-24 20:32:23 · 691 阅读 · 0 评论 -
USACO--3.2Sweet Butter+推优化的Dijkstral算法
这个题目思路是很简单的,我们只需要枚举每个定点作为目的地,然后再取其中距离总和最小的作为答案.开始的时候我用的是floyd一次就将所有点之间的最小距离求出来,但是超时了. 后面用的每次枚举一个点就用堆优化的求一次这个点到其余点的最短路,这样就可以过了.代码如下:/*ID: 15674811LANG: C++TASK: butter*/#include<iostream>#include<原创 2015-05-19 20:09:25 · 667 阅读 · 0 评论 -
USACO--2.4Overfencing
思路还是比较简单的:只需要求出每个点到出口的最近距离,然后在去其中的最大值作为答案。这个题目麻烦在建图,我建图的时候是将每个点的4个方向的情况都处理出来,然后再进行bfs。其实也可以直接处理出相关点的连通性。然后就是这个题目有两个出口,但是我们只需要将他们一次入队,就可以求出每个点到出口的最近距离了,而不用进行两次bfs(其实也可以加一个源点连接着两个点,可以达到同样的效果)。代码如下:/*ID:原创 2015-04-09 18:02:54 · 550 阅读 · 0 评论 -
USACO--3.1Agri-Net+prime算法
就是一个prime算法。代码如下:/*ID:15674811LANG:C++PROG:agrinet*/#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define maxn 110#define INF 0x3f3f3f3fint lowcost[maxn],vis[maxn];int原创 2015-04-10 15:49:58 · 671 阅读 · 0 评论 -
COJ--1541: There is No Alternative
一个图的最小生成树可能不是唯一的,但是无论在那种组成中都可能会包含固定的几条边,这个题目就是要我们求出共有几条这样的边和他们的权重之和。 我们可以先求出一颗最小生成树,然后记录下组成这颗生成树的所有边,然后再依次去掉这些边,看还能不能得到同样权重的最小生成树,如果可以那么去掉的这条边就不是必须的。代码如下:#include<iostream>#include<cstdio>#include<c原创 2015-03-23 00:13:52 · 815 阅读 · 0 评论 -
USACO--2.4Bessie Come Home
一道简单的最短路,因为数组下标问题检查了一个小时,悲剧。。。。。 两种做法:一种是用Z作为源点求到其它点的最短路,一种是直接用Floyd算法求出所有点之间的最短路。我才用了第一种做法代码如下;/*ID:15674811LANG:C++PROG:comehome*/#include<iostream>#include<cstdio>#include<cstring>#include<a原创 2015-03-27 18:16:01 · 827 阅读 · 0 评论 -
USACO--2.4Cow Tours
题目大意:一个图被分成若干个连通块,我们可以选择在这些连通块中增加一条边,求加边以后所有点最小距离最大值最小的情况(有些绕口~)。 思路:最暴力的思路就是依次枚举需要连边的连通块然后再枚举这两个连通块中需要连接的定点,然后再用Floyd算出所有点的最小距离,然后再求最大值。这样时间复杂度是n^7,肯定会超时。仔细想一下我们其实并不关心我们枚举的边是属于哪个连通块的,我们只需要保证枚举的边不在同一个原创 2015-03-27 16:30:32 · 911 阅读 · 0 评论 -
hdu--1856--More is better
一道简单点的并查集原创 2014-08-18 23:02:14 · 581 阅读 · 0 评论 -
poj--2524
一道简单的并查集#include#include#includeusing namespace std;int fa[55000];int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]);} void join(int x,int y){ int fx=find(x); int fy=f原创 2014-08-13 22:50:05 · 685 阅读 · 0 评论 -
csuoj--1307
dijkstra算法的一种变形吧题目要求的是最长路的最小值,所以用二分原创 2014-08-14 20:13:54 · 1031 阅读 · 0 评论 -
poj--1611
一道简单的并查集原创 2014-08-13 21:56:11 · 510 阅读 · 0 评论 -
poj--3352
#include#include#include#includeusing namespace std;#define MaxSize 10100int pre[MaxSize],low[MaxSize],ans[MaxSize];int dfs_clock,n,m; vectormap[MaxSize];int dfs(int u,int fa){ int lowu原创 2014-08-08 21:06:35 · 538 阅读 · 0 评论 -
hdu--4435--charge-station+贪心
题目链接:点击进入 首先按照题目的规则,肯定在编号越小的点建立加油站比编号大的点建立加油站要好,但是我们还是不能一下就知道哪些点应该建立加油站。好在点比较少,所以我们可以先在所有的点上都建好加油站,然后再从编号最大的点开始尝试着删除。这样剩下的问题就是判断当前的情况下能不能满足题目要求,其实我们可以将建有加油站的点都看成源点,那么就是一个多源点的最短路问题了,我们只需要计算出每个点到最近源点的距离原创 2015-11-07 21:39:35 · 778 阅读 · 0 评论