唯一最小生成樹 POJ 1679

2021-06-04 16:53:16 字數 620 閱讀 8754

判斷mst時候唯一,用prime演算法,複雜度o(n^2)

#define n 105

int n,m;

int dis[n],g[n][n];

bool vis[n];

int mx[n][n];//記錄路徑i-j最大的邊值

int pre[n];//記錄最小生成樹路徑

bool intree[n][n];//判斷哪些邊屬於mst

int prime(int s)

dis[s] = 0;

vis[s] = 1;

int ans = 0;

for(i=1;ig[tmp][j])}}

return ans;

}void init()

}}int main()

int ans = prime(1);

if(ans<0)

bool ok = 0;

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

}if(ok)break;

}if(ok)puts("not unique!");

else printf("%d\n",ans);

}return 0;

}

poj1679 最小生成樹

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

poj1679 最小生成樹

給定乙個圖,詢問是否存在不同的最小生成樹 思路 先用kru或者prim跑一條最小生成樹,把最小生成樹裡面的邊存起來,然後每次刪除一條邊跑最小生成樹演算法,看跑出來的生成樹和之前的是否一樣,如果一樣就有不同的最小生成樹,否則就沒有 注意 邊權為0的邊視為圖任然聯通,但是刪除這條邊時就不用和原來的比較 ...

POJ1679判斷最小生成樹的唯一性

題意 判斷最小樹是否唯一。思路 我用了兩種方法,主要就是好久沒敲了,找個水題練練手,第一種就是先一遍最小生成樹,然後列舉最小生成樹上的每一條邊,然後取消這條邊,在跑一遍最小生成樹,就這樣一直跑最小生成樹,如果找到了一顆和之前的那個一樣的,那麼就是不唯一,第二種方法也是先最小樹,然後列舉,在列舉的時候...