随笔分类 -  最小生成树

摘要:每条边有两个权值,一个费用h一个长度l,求连通整个图的最小r r=总费用/总长度r=(h1*x1+h2*x2*.....hn*xm)/(l1*x1+l2*x2+...ln*xm) 最小,其中x取0,1表示边不在或在树中直接列出两种解法:(1)二分比率r 将原图边权值修改为h-r*l ,求最小生成树,如果大于0,则可放大r,否则缩小r ,(2) 01分数规划 Dinkelbach 算法,首先任选可以... 阅读全文
posted @ 2010-06-11 19:25 北海小龙 阅读(335) 评论(0) 推荐(0)
摘要://题目大意:求一棵生成树让最大边最小边差值最小 //题目类型:最小生成树+枚举//解题思路:分析可知生成树一定是最小生成树,利用Kruskal算法枚举所有的最小生成树 #include <iostream>#include <algorithm>//#include <conio.h>using namespace std;#define narray 101... 阅读全文
posted @ 2010-06-09 21:45 北海小龙 阅读(575) 评论(0) 推荐(0)
摘要:typedef struct edge{ int a; int b; int value;}edge;edge edges[earraysize];int final[narraysize]; //存储父节点 int nodecount[narraysize]; //存储该节点孩子结点的个数 bool cmp(edge a,edge b){ return a.value<b.value;}i... 阅读全文
posted @ 2010-06-05 08:46 北海小龙 阅读(334) 评论(0) 推荐(0)
摘要:int graph[arraysize][arraysize];bool final[arraysize];int d[arraysize]; int maxData =0x7fffffff;int N; //结点个数 int prim(int src){ int sum = 0; int minData; int i,j; int v; memset(final,0,sizeof(final))... 阅读全文
posted @ 2010-06-04 21:37 北海小龙 阅读(356) 评论(0) 推荐(0)
摘要://最小生成树:Prim算法实现,不要使用Kruskal算法,否则会出现超时#include <stdio.h>#include <math.h>#include <string.h>#define nodesize 1001typedef struct node{int x;int y;}node;//对于nodes和record的含义不同,nodes指的是点... 阅读全文
posted @ 2010-04-30 22:29 北海小龙 阅读(270) 评论(0) 推荐(0)