
最小生成树
秋天的风--
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
展开
-
hdu 1879
#include#include#define N 100struct node {int x,y,dis;}road[N*N];int pre[N];int find(int n) {return pre[n]=n==pre[n]?n:find(pre[n]);}int cmp(const void *a,const void *b) {return原创 2013-10-30 20:07:36 · 581 阅读 · 0 评论 -
hdu 4081 最小生成树变形
/*关于最小生成树的等效边,就是讲两个相同的集合连接在一起 先建立一个任意最小生成树,这条边分开的两个子树的节点最大的一个和为A,sum为最小生成树的权值和,B为sum-当前边的权值 不断枚举最小生成树中的边找最优值即可。*/#include#include#include#include#define N 1100struct nodee{ int u,v;原创 2014-08-02 18:28:50 · 527 阅读 · 0 评论 -
最优比例生成树最优比率生成树 01分数规划问题
转载:http://blog.youkuaiyun.com/sdj222555/article/details/7490797网上有一些很数学的证明方法,表示看的挺晕,自己理解了一下后,发表下自己的看法,如果有错误,再进行修改其实原题就是求 MIN( ∑CiXi / ∑DiXi ) Xi∈{0,1} ,对每个生成树,设其比率r=∑CiXi / ∑DiXi ,可得∑CiXi - ∑DiXi * r=0(条件转载 2014-08-19 09:43:01 · 550 阅读 · 0 评论 -
prime算法邻接表写法
#include #include using namespace std;typedef struct { long v; long next; long cost;}Edge;typedef struct { long v; long cost;}node;bool operator <(co转载 2014-08-18 14:51:44 · 1677 阅读 · 1 评论 -
poj 2728 最优比例生成树(01分数规划)模板
/*迭代法 :204Ms*/#include#include#include#define N 1100#define eps 1e-10#define inf 0x3fffffffstruct node { int u,v,w;}p[N];double ma[N][N];double distance(int i,int j) {return sqrt(1.0*(原创 2014-08-19 09:52:06 · 907 阅读 · 0 评论 -
poj 1679 判断最小生成树是否唯一
/*只需判断等效边和必选边的个数和n-1的关系即可*/#include#include#define N 110struct node { int u,v,w;}f[N*N*2];int cmp(const void *a,const void*b) {return (*(struct node *)a).w-(*(struct node *)b).w;}int pre[原创 2014-08-14 20:31:51 · 732 阅读 · 0 评论 -
最小生成树prime算法模板
#include#includeusing namespace std;int map[505][505];int v, e;int prime(){ bool vis[505]; int dist[505]; int i,j,sum=0; for(i=1;i<=v;i++) { vis[i]=0; //先假设编号为1的点加入MST d转载 2014-08-16 11:10:36 · 1599 阅读 · 0 评论 -
次小生成树的学习
为什么写这个呢?因为那天听到了这个词,属于MST的扩展……最小K度树有空研究。一.理论准备 需要读者事先懂得prime算法,不太了解的请看博主这一篇http://www.cnblogs.com/hxsyl/p/3286956.html,也需要读者对DP了解一些。 先看一个结论:次小生成树可由最小生成树换一条边得到,笔者认为很有必要搞清楚这一点,,否则对算法理转载 2014-08-18 09:39:26 · 605 阅读 · 0 评论 -
hdu 2349 最小生成树
/*刚开始想错了,我以为必须是相邻的点才能连接,原来无线距离可以任意连接*/#include#include#include#include#define N 600struct node { int u,v;}f[N];struct nodee{ int u,v; double w;}ff[N*N];double distance(int i,int j) {原创 2014-08-18 11:27:07 · 715 阅读 · 0 评论 -
poj 2831 次小生成树模板
/*次小生成树题意:给你一些路径,现在将一部分路径权值减少后问是否可以替代最小生成树里面的边。解:次小生成树,即将这条边连上,构成一个环求出任意两点路径之间的除了这条边的最大值,比较这个最大值>=这条边,说明可以替换。prime算法次小生成树模板*/#include#include#define N 1100#define inf 0x3fffffffint ma[N][N];原创 2014-08-18 15:38:49 · 1132 阅读 · 0 评论 -
poj 3925 枚举+prime
/*因为15很小可以暴力枚举然后用最小生成树的prim来计算*/#include#include#include#define N 40#define inf 0x3fffffffint a[N],f[N],en[N];int ma[N][N],n,m;double dd;void prime(){ int i,j,vv[N],dis[N],sum,total;原创 2014-09-17 14:53:53 · 920 阅读 · 0 评论 -
hdu 4786 最小生成树与最大生成树
/* 题意 :有一些边权值为1和0,判断是否存在一个生成树使得他的总权值为一个斐波那契数。 解法:建立一个最小生成树向里面加权值为1的边替换为0的边,保证原来的联通。因为权值为1,可直接求出最大生成树和最小生成树。 判断他们中间是否有斐波那契数即可,当然要先判断是否可以构成一个生成树。 这个我刚开始忘判断了。*/#include#include#include#defin原创 2014-08-02 20:17:31 · 530 阅读 · 0 评论 -
最小生成树
【HDU】1213 How Many Tables 根蒂根基并查集★1272 小希的迷宫 根蒂根基并查集★1325&&poj1308 Is It A Tree? 根蒂根基并查集★1856 More is better 根蒂根基并查集★1102 Constructing Roads 根蒂根基最小生成树★1转载 2014-05-26 18:28:36 · 569 阅读 · 0 评论 -
nyoj 38 简单并查集的应用&最小生成树
#include#include#define inf 0x3fffffff#define N 600struct node {int x,y,w;}ma[N*N];int cmp(const void *a,const void *b) {return (*(struct node *)a).w-(*(struct node *)b).w;}int pre[N];int原创 2014-05-20 19:55:51 · 513 阅读 · 0 评论 -
hdu 1102
#include#include#include#define N 100struct node {int x,y,dis;}road[N*N];int pre[N];int find(int n) {return pre[n]=n==pre[n]?n:find(pre[n]);}int cmp(const void *a,const void *b)原创 2013-10-30 18:48:19 · 594 阅读 · 0 评论 -
hdu 1863
#include#define N 100#define inf 999999999int map[N][N],next[N],visit[N];int main() {int n,m,cnt,a,b,c,min,flag,sum,i,j;while(scanf("%d%d",&n,&m),n) {for(i=1;ivisit[i]=1;for(j=1;jm原创 2013-10-30 19:29:26 · 591 阅读 · 0 评论 -
hdu 1875
#include#include#define N 110#define inf 999999999int a[N],b[N],visit[N],next[N];double G[N][N];int main() {int cnt,flag,i,j,n,t,h;double sum,min;scanf("%d",&t);while(t--) {scan原创 2013-10-30 19:55:38 · 561 阅读 · 0 评论 -
hdu 3371
#include#include#define N 501struct node {int x,y,dis;}road[N*N];int pre[N];int find (int n ) {return pre[n]=n==pre[n]?n:find(pre[n]);}int cmp(const void *a,const void *b) {retur原创 2013-10-30 20:35:57 · 631 阅读 · 0 评论 -
hdu 1301
#include#include#define N 30#define inf 999999999int map[N][N],next[N],visit[N];int main() {int a,b,i,j,cnt,sum,t,n,m;char ch,c;while(scanf("%d",&n),n) {for(i=1;ivisit[i]=1;for(j原创 2013-10-31 15:31:10 · 606 阅读 · 0 评论 -
poj 2253
dijkstra借鉴http://blog.youkuaiyun.com/wangjian8006/article/details/7871812#include#include#define N 300#define inf 999999999double map[N][N],dis[N];double max(double a,double b) {return a>b?原创 2013-11-03 22:22:47 · 580 阅读 · 0 评论 -
hdu 1598
//暴力+并查集#include#include#define N 300#define inf 0x7fffffffstruct node {int x,y,spee;}map[N*4];int pre[N];int find(int n) {if(n!=pre[n])pre[n]=find(pre[n]);return pre[n];}i原创 2013-11-11 17:09:46 · 813 阅读 · 0 评论 -
poj 2031
#include#include#include#define N 200double co(double a,double b) {return (a-b)*(a-b);}struct node {double x,y,z,r;}a[N];struct nodee{double len;int x,y;}map[N*N];int pre[N];int find(i原创 2014-04-08 10:01:11 · 416 阅读 · 0 评论 -
poj 2377 最大生成树
#include#include#define N 1100struct node {int u,v,w;}bian[110000];int pre[N];int cmp(const void *a,const void *b) {return (*(struct node *)b).w-(*(struct node *)a).w;}int find(int原创 2014-05-11 09:42:07 · 575 阅读 · 0 评论 -
hdu 2682
#include#include#include#include#define N 700#define NN 2000010int prime[NN];int a[N];struct node {int x,y,w;}ma[N*N];void ispri() { int i,j; memset(prime,-1,sizeof(prime)原创 2014-05-20 10:07:44 · 672 阅读 · 0 评论 -
hdu 4081 次小生成树
/*题意:每个城市有人口,现在有一棵最小生成树,将其中一条边割开,然后选出两个城市的人口A/剩余的最小生成树中的边和B,使其比值尽可能大。次小生成树求环上的最大值*/#include#include#include#include#includeusing namespace std;#define inf 0x3fffffff#define N 1100struct i原创 2014-11-04 10:37:42 · 580 阅读 · 0 评论