hdu 1863(最小生成樹)

2021-06-13 17:26:21 字數 556 閱讀 5289

/* 基礎的最小生成樹問題,  不過 要特判條件不足的情況 */

#include

#include

#define inf 1<<30

int n,m,vis[110],low[110];

int map[110][110];

int init()

int prim()

if(pos==-1) return -1; // 代表這當前步驟缺少條件

int k = pos;

vis[k] = 1;

ans+=low[k];

for(int j = 1; j <= n; j++)

if(!vis[j]&&low[j]>map[k][j])

low[j] = map[k][j];

}return ans;

}int main()

int p = prim();

if(p==-1)

puts("?");

else

printf("%d\n",p);

}return 0;

}

hdu 1863 最小生成樹

使用並查集,陣列不要太小 include stdio.h int set 200 int n,m typedef struct nodenode,pnode node road 200 void init int find int u return set u int join int u,int ...

HDU 1863 最小生成樹

這還是最小生成樹的模版題,以前都是用的kruskal做的,這次用prime做的,寫篇部落格記錄下。prime的複雜度為n 2 n為點的個數 與邊的個數無關,用於稠密圖,而kruskal的複雜度為mlgm m為邊的個數 與點的個數無關,主要用於稀疏圖。include include includeus...

hdu 1863 最小生成樹

還是最小生成樹,還是用了kruskal寫,就是有點不一樣的地方在於,他要讓你判斷是否能夠保證暢通,也就是是否能有最小生成樹,其實就是判斷是不是連通圖吧,因為連通圖一定會有最小生成樹。一開始我的想法是,先進行一次並查集的合併與查詢,看一下有幾個集合,如果只有乙個集合的話就是連通圖,肯定有最小生成樹存在...