原題
//本題是判斷最小生成樹是否唯一,可以根據先刪除最小生成樹裡面的邊然後新加入一條邊,然後判斷新生成的最小生成樹的權值和原來是否相同
//這就要求要求原來最小生成樹里任意兩個點之間的最大值。
#include #include #include #include #include #include #include #include #include //#include #include #include #include #include #include #include using namespace std;
#define inf 999999999
#define n 111
int n,m;
int pre[n],dis[n][n],max1[n][n],g[n];
int vis[n],stack[n];
int sum;
int max(int a,int b)
int minn(int a,int b)
void prime()
vis[1] = 0;
int top=0;
sum = 0;
stack[top++] = 1;
int tmp;
for(i=1;i<=n;i++)
} vis[k] = 1;
if(tmp == inf)
break;
sum+=tmp;
for(j=0;jmax1[k][stack[j]] = max1[stack[j]][k];
} stack[top++] = k;
for(j=1;j<=n;j++)
} }}int main()
}for(i=0;ifor(i=1;i<=m;i++)
prime();
int min = inf;
for(i=1;i<=n;i++)}}
if(min != 0)
else
} }return 0;
}
次小生成樹的思想 pku1679最小生成樹是否唯一
次小生成樹是權值第二小的生成樹,可能與最小生成樹權值相等。對於最小生成樹上任意兩點,如果只能經過最小生成樹上的邊,路徑都是唯一的。而次小生成樹可以由一條非最小生成樹上的邊換取一條最小生成樹的邊而得到。所以在生成最小生成樹的同時,記錄最小生成樹上任意兩點路徑中最長的路徑即可。include using...
poj1679 最小生成樹
題目大意 判斷是否存在最小生成樹。如果存在,判斷其是否唯一。用prim演算法求最小生成樹。將其中的每一條邊依次替換,權值是否和最小生成樹相同。如果相同,則最小生成樹不唯一。如果都不相同,則唯一。這個prim的模板比較好,可以再求最小生成樹的同時直接進行判斷唯一性。如下 include include...
poj1679 最小生成樹
給定乙個圖,詢問是否存在不同的最小生成樹 思路 先用kru或者prim跑一條最小生成樹,把最小生成樹裡面的邊存起來,然後每次刪除一條邊跑最小生成樹演算法,看跑出來的生成樹和之前的是否一樣,如果一樣就有不同的最小生成樹,否則就沒有 注意 邊權為0的邊視為圖任然聯通,但是刪除這條邊時就不用和原來的比較 ...