图论
呆呆与笨笨
梦想是被追逐的,而不是幻想的
展开
-
南阳42 一笔画问题
#include#includeint du[1010],map[1010][1010],vis[1010],n;void dfs(int k){ int i; vis[k]=1; for(i=1;i<=n;i++){ if(map[k][i]) { du[k]++; if(vis[i]==0) dfs(i); } }}int main(){ in原创 2014-01-03 10:48:56 · 760 阅读 · 0 评论 -
hdu 2036 过山车(匈牙利算法)
匈牙利算法原创 2014-05-03 18:11:04 · 611 阅读 · 0 评论 -
hdu 2112 HDU Today
认真读题,题中有很多坑,字符串处理能力有待提高。#include#include#define inf 10000int map[200][200],dis[200],used[200];char s[200][50];void dijkstra(int n){ int i,j,k,max; for(i=1;i<=n;i++){ dis[i]=map[1][i]; //p原创 2014-01-05 10:42:37 · 531 阅读 · 0 评论 -
SPFA算法
SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算。算法大致流程是用一个队列来进行维护。 初始时将源加入队列。 每次从队列中取出一个元素,并对所有与他相邻的点进行松弛,若某个相邻的点松弛成功,则将其入队。 直到队列为空时算法结束。这个算法,简单的说就是队列优化的bellman-ford,利用了转载 2014-01-06 21:46:04 · 518 阅读 · 0 评论 -
hdu 2066 一个人的旅行
思路就是把小草家看做源点0,然后和小草家相近的城市到源点距离为0原创 2014-05-03 11:23:22 · 471 阅读 · 0 评论 -
Prim算法计算最小生成树之和
【试题二】据不完全统计,受地震影响,四川大部分灾区通信陷入瘫痪,数千个基站因断电、传输中断等原因退出服务,目前总公司已紧急部署对受灾地区进行通信抢修。按照应急通信保障预案,必须尽快、付出代价最小,效率更高来全力恢复通信。由于四川大部分灾区都处于山区,有很多基站之间不能直接建立通信。现已知建立各基站之间直接通信的代价,问如何建立总代价最小的通信网,使得任意两个基站之间都能通信?【标准输入原创 2014-05-04 21:03:45 · 747 阅读 · 0 评论 -
hdu 2647 Rewaed(拓扑排序+链式前向星)
用邻接矩阵会超内存原创 2014-05-06 22:01:54 · 756 阅读 · 1 评论 -
hdu 4081 Qin Shi Huang's National Road System(次小生成树)
题目大意:有n个城市,秦始皇要修用n-1条路把它们连起来,要求从任一点出发,都可以到达其它的任意点。秦始皇希望这所有n-1条路长度之和最短。然后徐福突然有冒出来,说是他有魔法,可以不用人力、财力就变出其中任意一条路出来。秦始皇希望徐福能把要修的n-1条路中最长的那条变出来,但是徐福希望能把要求的人力数量最多的那条变出来。对于每条路所需要的人力,是指这条路连接的两个城市的人数之和。原创 2014-08-12 09:59:55 · 415 阅读 · 0 评论 -
无向图最小生成树、次小生成树,最短路模板
网址:http://blog.csdn.net/were__wolf/article/details/20833895转载 2014-08-12 10:22:08 · 487 阅读 · 0 评论 -
poj 2387 Til the Cows Come Home(Dijskra算法)
#include#include#includeusing namespace std;const int inf=10000010;//最大值开大点,题意与测试数据不符 int map[1010][1010];int used[1010],dis[1010],n;void Dijskra(){ int i,j,k; for(i=1;i<=n;i++){ dis[i]=inf原创 2014-08-11 17:25:57 · 507 阅读 · 0 评论 -
蓝桥 最短路
链式前向星 #include#include#define inf 100000//结构体前向星 //蓝桥oj用C编译不能用typedef struct In{ int e;//终点 int w;//权值 int next;//下一条边的存储位置}map[200010];// map【】中是边数 int dis[20010],Q原创 2014-03-17 16:55:10 · 632 阅读 · 0 评论 -
链式前向星
我们首先来看一下什么是前向星.前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序,并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了.用len[i]来记录所有以i为起点的边在数组中的存储长度.用head[i]记录以i为边集在数组中的第一个存储位置.那么对于下图:转载 2014-03-17 16:56:11 · 514 阅读 · 0 评论 -
蓝桥 大臣的旅费
只要将图用邻接矩阵表示出来,然后用Floyd算法去求任意两点之间的最短距离,只要求出距离,剩下的求要花最多多少钱在容易不过啦。这个题目就是找到任意两点最短路径的最大值,这样的话就可以求出最多花多少钱。#include#include#define inf 10000int map[110][110];int Floyd(int n){ int i,j,k; for(k=原创 2014-03-14 17:49:41 · 562 阅读 · 0 评论 -
hdu 3342 legal or no
#include#includeint map[110][110],into[210],ans[110];//判断是否有环,入度数组的范围是顶点数的2倍 void topu(int n){ int i,j,k; for(i=0;i<n;i++) for(j=0;j<n;j++) if(map[i][j]) into[j]++; for(i=0;i<n原创 2014-01-03 22:16:23 · 564 阅读 · 0 评论 -
hdu 1285 确定比赛名次
解题: 拓扑排序是对有向无环图的一种排序。表示了顶点按边的方向出现的先后顺序。如果有环,则无法表示两个顶点的先后顺序。 一个简单的求拓扑排序的算法:首先要找到任意入度为0的一个顶点,删除它及所有相邻的边,再找入度为0的顶点,以此类推,直到删除所有顶点。顶点的删除顺序即为拓扑排序。性质1、 拓扑排序在有向无环图中才能排出有效的序列,否则能判断该有向图有环。2、原创 2014-01-03 22:14:16 · 588 阅读 · 0 评论 -
hdu 1874 畅通工程续
注意: 这里两点之间,分清题目是说两点之间的开销预算(一般唯一)还是 之间的道路长度 ,这里两点之间可能存在多条道路,注意取最短的一条(初次筛选) #include#define INF 1000000int map[210][210];void floyd(int n){ int i,j,k; for(k=0;k<n;k++) for(i=0;原创 2014-01-03 22:11:51 · 504 阅读 · 0 评论 -
hdu 2680 Choose the best route
图是有向图,坑啊!用Floyd算法超时,反向思考,从终点出发,逆推!Choose the best routeProblem DescriptionOne day , Kiki wants to visit one of her friends. As she is liable to carsickness , she wants to arrive at her frien原创 2014-01-05 12:10:25 · 411 阅读 · 0 评论 -
拓扑排序
在介绍拓扑排序前我们需要了解什么是偏序和全序。1、偏序——若集合X上的关系R是自反的、反对称的和传递的,则称R是集合X上的偏序关系。2、全序——设R是集合X上的偏序,如果对每个x,y∈X必有xRy或yRx,则称R是集合X上的全序关系。而由某个集合上的一个偏序得到该集合上的一个全序,这个操作就称之为拓扑排序。拓扑排序的经典例子就是选课问题,数据结构书籍上都有介绍,这里不再赘述。那转载 2014-01-05 19:12:31 · 841 阅读 · 0 评论 -
hdu 2544 最短路
#include#include #define inf 10000000int map[110][110],d[110],used[110];int n;void dijikstra(){ int i,j,k,max; for(i=1;i<=n;i++){ d[i]=map[1][i]; } d[1]=0;used[1]=1; f原创 2014-01-03 17:54:42 · 588 阅读 · 0 评论 -
hdu 1863 畅通工程
#include#include#define inf 100000int map[110][110],dis[110];int n,vis[110];int Prim(){ int i,j,k,tmp,ans; for(i=1;i<=n;i++) dis[i]=inf;//初始化 dis[1]=0; for(i=1;i<=n;i++){ tmp=inf; for(j原创 2014-01-07 17:48:05 · 523 阅读 · 0 评论 -
最小生成树
设G = (V,E)是无向连通带权图,即一个网络。E中的每一条边(v,w)的权为c[v][w]。如果G的子图G’是一棵包含G的所有顶点的树,则称G’为G的生成树。生成树上各边权的总和称为生成树的耗费。在G的所有生成树中,耗费最小的生成树称为G的最小生成树。构造最小生成树的两种方法:Prim算法和Kruskal算法。 一、最小生成树的性质 设G = (V,E)是连通带权图,U是V转载 2014-01-07 17:43:15 · 578 阅读 · 0 评论 -
几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
几个最短路径算法的比较:Floyd 求多源、无负权边的最短路。用矩阵记录图。时效性较差,时间复杂度O(V^3)。 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题。Floyd-Warshall算法的时间复杂度为O(N^3),空间复杂度为O(N^2)转载 2014-01-05 19:31:12 · 1647 阅读 · 0 评论 -
hdu 3790 最短路径问题(多权值的最短路)
#include#include#includeusing namespace std;const int inf=100000000;struct In{ int x, y;};In map[1010][1010];int dis[1010],cost[1010],n,used[1010];int dij(int a){ int i,j,k; for原创 2014-08-13 19:55:45 · 957 阅读 · 0 评论