題意:若最小生成樹唯一則輸出權值和,若不唯一輸出not
not unique!
運用prim演算法將最小生成樹求出,然後在依次列舉刪除最小生成樹中的每一條邊,判斷是否還能構成乙個新的最小生成樹,且權值和與初始的權值和相等,若能構成則不唯一
#include#include#include
using
namespace
std;
/*看了很久才相處為什麼要用這個stl
假設v,u都為最小生成樹中的點,但是
v,u所擴充套件出來的最小生成樹邊卻不一定相等
所以導致陣列下標記錄u,v顯得很不方便,而
vector會將元素加入u,v陣列的末尾所以無需知道
陣列末尾的下標是多少
*/vector
edge[300
];#define inf 99999999
#define max 300
intjudge;
intmap[max][max];
intvis[max];
int prim(int n,int flag)//
這裡的flag是0,1,區別就是計算的最小生成樹是第一次的還是後來列舉的
lowcost[
1]=0
;
for(i=1;i<=n;i++)
}sum+=min;
vis[minid]=1
;
if(flag)
}for (j=1;j<=n;j++)}}
return
sum;
}int
main()
for(i=0;i<=n;i++)
edge[i].clear();
for (i=0;i)
ans=prim(n,1);//
f注意這裡的1
for (int s=1;s<=n;s++)
}if(judge) break
; }
if(judge) printf("
not unique!\n");
else printf("
%d\n
",ans);
}return0;
}
CSU 1541 判斷最小生成樹是否唯一
include include include include includeusing namespace std define n 1000 int fa n vis n n int isok struct point point bool operator bool judge same in...
C 判斷最小生成樹是否唯一演算法
1 最小生成樹是否唯一演算法 給定一無向圖,判斷最小生成樹是否唯一。2 思路 先求出最小生成樹,記錄結果,依次刪除樹中各邊,再求最小生成樹,看與最初結果是否相同,若相同則不唯一。3 實現 include include include include include include include ...
PKU1679判斷最小生成樹是否唯一Prime演算法
原題 本題是判斷最小生成樹是否唯一,可以根據先刪除最小生成樹裡面的邊然後新加入一條邊,然後判斷新生成的最小生成樹的權值和原來是否相同 這就要求要求原來最小生成樹里任意兩個點之間的最大值。include include include include include include include i...