最小瓶頸樹

http://poj.org/problem?id=3522
瓶頸生成樹 無向圖G的一顆瓶頸生成樹是這樣的一顆生成樹,它最大的邊權(quán)值在G的所有生成樹中是最小的。瓶頸生成樹的值為T中最大權(quán)值邊的權(quán)。

#include<string.h>
#include<stdio.h>
#include<queue>
#include<algorithm>
#define Max(a,b) a>b?a:b
#define Min(a,b) a<b?a:b
using namespace std;
int father[110],grade[110],component;
struct Edge
{
    int u,v,w;
    bool operator <(const Edge& that) const
    {
        return w<that.w;
    }
}arr[4960];
int parent(int v)
{
    while(v!=father[v])
    {
        father[v]=father[father[v]];
        v=father[v];
    }
    return v;
}
int  connect(int a,int b)
{

    int fa=parent(a);
    int fb=parent(b);
    if(fa==fb) return 0;
    if(grade[fa]<grade[fb])
    {
        father[fb]=fa;
        grade[fa]+=grade[fb];

    }
    else
    {
        father[fa]=fb;
        grade[fb]+=grade[fa];
    }
    component--;
    return 1;

}
int main(){
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
            int len=0x3f3f3f3f;
            if((n==0)&&(m==0)) break;
            if(m==0)
            {
                printf("-1\n");
                continue;
            }
            for(int i=0;i<m;i++)
            {

                scanf("%d%d%d",&arr[i].u,&arr[i].v,&arr[i].w);
            }
            sort(arr,arr+m);
           // printf("Min:%d\n",len);
        for(int i=0;i<=m-n+1;i++)
        {
             memset(grade,-1,sizeof(grade));
            for(int i=1;i<=n;i++)
            father[i]=i;
            component=n;
            int lef=0x3f3f3f3f,rig=-1;
            for(int j=i;j<m;j++)
            {
                if(connect(arr[j].u,arr[j].v))
                {
                    lef=Min(lef,arr[j].w);
                    rig=Max(rig,arr[j].w);
                }
            }
            if(component==1)
            len=Min(len,rig-lef);
        }
        if(len==0x3f3f3f3f) printf("-1\n");
        else printf("%d\n",len);

    }
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容