poj3925(最小生成樹)

2021-06-08 17:33:26 字數 745 閱讀 7047

我最開始想的是用邊除以該邊連線的兩個頂點的值作為此邊的權值,然後再用kruskal求最小生成樹。。。。。。。但這樣似乎有漏洞,而且總是tle。。。。後來上網看了題解:先遞迴深搜找出n個點中取m個頂點的組合,再求出其最小生成樹,保留最小值即可。。。

#include

#include

#include

#include

#define inf  0x7fffffff

int n,m,no[20],ed[20][20];

double mi;

int que[20],vis[20],dis[20],v[20];

void prime()                          //用prime演算法求m個點的最小生成樹

vis[tmp]=1;

sum+=min;

for(j=1;j<=m;j++)

}for(j=1;j<=m;j++)

w+=no[v[j]];

double t=(double)sum*1.0/(double)w;

if(t < mi)

}void dfs(int x,int c)                    //深搜遞迴,找出所有n個點中取m個點的組合

for(i=x+1;i<=n;i++)

dfs(i,c+1); 

}int main()

system("pause"); 

return 0; 

}

POJ 1258 最小生成樹

include include struct fiberfiber 10000 struct farmsfarms 100 void exchange struct fiber fiber,int i,int j int partition struct fiber fiber,int p,int ...

最小生成樹 poj 2485

include include include include include include define m 505 define im 505 505 2 using namespace std int r im int w im int u im int v im int p m int c...

poj1679 最小生成樹

題目大意 判斷是否存在最小生成樹。如果存在,判斷其是否唯一。用prim演算法求最小生成樹。將其中的每一條邊依次替換,權值是否和最小生成樹相同。如果相同,則最小生成樹不唯一。如果都不相同,則唯一。這個prim的模板比較好,可以再求最小生成樹的同時直接進行判斷唯一性。如下 include include...