Kruskal_判斷最小生成樹是否唯一

http://poj.org/problem?id=1679

#include<cstdio>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;
const int N=10000+10;
int father[N+N];
int grade[N+N];
int component;
struct Edge
{
    int from,to,w;
    bool operator <(const Edge& that) const
    {
        return w<that.w;
    }
}arr[50010],tmp;
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 t,n,m,a,b,c;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        component=n;
        vector<int> edge;
        for(int i=1;i<=n;i++)
        {
            father[i]=i;
            grade[i]=1;
        }
        for(int i=0;i<m;i++)
        {
            scanf("%d%d%d",&arr[i].from,&arr[i].to,&arr[i].w);
        }
        sort(arr,arr+m);
        int ans=0;
        for(int i=0;i<m;i++)
        {
            int a=arr[i].from,b=arr[i].to;
            if(connect(a,b))
            {
                ans+=arr[i].w;
                edge.push_back(i);
            }
        }
        if(component!=1)
        {
            printf("Not Unique!\n");
        }
        bool flag=false;
        for(vector<int>::iterator it=edge.begin();it!=edge.end();it++)
        {
            for(int i=1;i<=n;i++)
            {
                father[i]=i;
                grade[i]=1;
            }
            component=n;
            int sum=0;
            for(int i=0;i<m;i++)
            {
                int a=arr[i].from,b=arr[i].to;
                if((i!=(*it))&&connect(a,b))
                {
                    sum+=arr[i].w;
                   // printf("a:%d b:%d\n",a,b);
                }
            }
           // printf("sum:%d\n",sum);
            if(component!=1) continue;
            if(sum==ans)
            {
                flag=true;
                break;
            }
        }
        if(flag) printf("Not Unique!\n");
        else printf("%d\n",ans);
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脆栋,一起剝皮案震驚了整個(gè)濱河市魄懂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌原押,老刑警劉巖基显,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椭员,死亡現(xiàn)場(chǎng)離奇詭異雨涛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)赶么,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門肩豁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辫呻,你說我怎么就攤上這事清钥。” “怎么了放闺?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵循捺,是天一觀的道長。 經(jīng)常有香客問我雄人,道長从橘,這世上最難降的妖魔是什么念赶? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮恰力,結(jié)果婚禮上叉谜,老公的妹妹穿的比我還像新娘。我一直安慰自己踩萎,他們只是感情好停局,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著香府,像睡著了一般董栽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上企孩,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天锭碳,我揣著相機(jī)與錄音,去河邊找鬼勿璃。 笑死擒抛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的补疑。 我是一名探鬼主播歧沪,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼莲组!你這毒婦竟也來了诊胞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤锹杈,失蹤者是張志新(化名)和其女友劉穎撵孤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嬉橙,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡早直,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年寥假,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了市框。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡糕韧,死狀恐怖枫振,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萤彩,我是刑警寧澤粪滤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站雀扶,受9級(jí)特大地震影響杖小,放射性物質(zhì)發(fā)生泄漏肆汹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一予权、第九天 我趴在偏房一處隱蔽的房頂上張望昂勉。 院中可真熱鬧,春花似錦扫腺、人聲如沸岗照。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽攒至。三九已至,卻和暖如春躁劣,著一層夾襖步出監(jiān)牢的瞬間迫吐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國打工习绢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渠抹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓闪萄,卻偏偏與公主長得像梧却,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子败去,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • Alibaba的題放航,這道題我參照了下面的解法,非常巧妙. https://discuss.leetcode.com...
    stepsma閱讀 1,427評(píng)論 0 0
  • 心情不好的時(shí)候會(huì)特別偏愛愛情題材的片子圆裕,或是百看不厭的言情小說讓自己平靜广鳍。韓國的愛情片到如今也有了自己的風(fēng)格。有些...
    木又寸禾閱讀 898評(píng)論 2 3
  • 我還是很喜歡你 ,像風(fēng)走了八千里 行拢,不見歸期祖秒。我還是很喜歡你 ,像春來秋去 舟奠,從無停息 竭缝。我還是很喜歡你 ,像洪水...
    白系閱讀 1,186評(píng)論 0 0
  • Archislands閱讀 205評(píng)論 0 0