題目描述:就是求次小生成樹,若次小生成樹與最小生成樹相等則輸出 not unique! 否則輸出最小生成樹權值和。
題目思路:就是運用次小生成樹演算法
ac**:
#include #include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
using
namespace
std;
#define gamma 0.5772156649015328606065120 //
尤拉常數
#define mod 1000000007
#define inf 0x3f3f3f3f
#define n 100001
#define maxn 1000100typedef
long
long
ll;typedef pair
pii;
int pic[101][101],tans,used[101][101],path[101][101
],n;
///used陣列判斷兩點之間直接相連的邊是否使用過,path陣列記錄最小生成樹中點i到點j最大的邊權值
intprim()
///path陣列更新過程類似dp過程
if(!vis[j]&&d[j]>pic[u][j])}}
return
ans;
}int t_prim(int &v)
return
ans;
}int
main()
_ans=prim();
tans=t_prim(_ans);
if(tans==_ans) printf("
not unique!\n");
else printf("
%d\n
",_ans);
}return0;
}
POJ 1679 次小生成樹
判斷最小生成樹是否唯一,方法是這樣的 1.對圖中每個點,掃瞄其他的邊,如果存在其他權值相同的邊,則對改邊作標記 2.然後用 kruskal或者prim 求mst 3.求的mst後,如果該mst不包含作了標記的邊,即可判定mst唯一 如果包含作了標記的邊,則依次去掉這些邊在求mst,如果求的mst權值...
poj 1679(次小生成樹)
題意 給你乙個圖,求最小生成樹是否唯一。思路 求次小生成樹,看它和最小生成樹的權值是否相等。include include include include define inf 99999999 using namespace std int vis 10005 int f 105 int n,m ...
POJ 1679 次小生成樹
題目大意,t組樣例輸入,n個點m條邊,求除最小生成樹以外的最短邊。暴力,可勁暴力,資料水,暴力出奇蹟 模擬不選每條最小生成樹中的邊,取最小 by acer.mo include include include include include include includeusing namespac...