題意:給你乙個圖,求最小生成樹是否唯一。
思路:求次小生成樹,看它和最小生成樹的權值是否相等。
#include
#include
#include
#include
#define inf 99999999
using
namespace
std;
int vis[10005];
int f[105];
int n,m;
struct edgeedge[10005];
bool cmp(const edge&a,const edge&b)
bool union(int a,int b)
return
false;
}int main()
sort(edge,edge+m,cmp);
int mst=0;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)f[i]=i;
for(int i=0;iif(union(edge[i].from,edge[i].to))
}///求最小生成樹,用過的邊vis標記為1.
int ans=inf;
for(int i=0;i///依次刪去每條邊,刪去的邊vis為2。
///再求一次最小生成樹,求出最小的樹就是次小生成樹。
int cnt=0;
if(vis[i])
}//coutans=min(k,ans);
vis[i]=1;}}
if(ans==mst)
cout
<<"not unique!"
cout
<}
}
POJ 1679 次小生成樹
判斷最小生成樹是否唯一,方法是這樣的 1.對圖中每個點,掃瞄其他的邊,如果存在其他權值相同的邊,則對改邊作標記 2.然後用 kruskal或者prim 求mst 3.求的mst後,如果該mst不包含作了標記的邊,即可判定mst唯一 如果包含作了標記的邊,則依次去掉這些邊在求mst,如果求的mst權值...
POJ 1679 次小生成樹
題目大意,t組樣例輸入,n個點m條邊,求除最小生成樹以外的最短邊。暴力,可勁暴力,資料水,暴力出奇蹟 模擬不選每條最小生成樹中的邊,取最小 by acer.mo include include include include include include includeusing namespac...
POJ 1679(次小生成樹)
poj1679 分析 本題可以通過求出次小生成樹,然後再比較次小生成樹與最小生成是否相等來判斷最小生成樹是否唯一。我們仔細回想一下kruskal求最小生成樹的過程,最後得到的一定是乙個無向連通圖,如果我們要想求次小生成樹的話,我們可以考慮列舉每一條不屬於最小生成樹的邊,然後這條邊會和原先的最小生成樹...