[最小生成樹變形] vijos

題目
完全圖:

引用一個寫的不錯的題解
其實此題就是變形的最小生成樹

每兩個點之間都存在且僅存在一條邊
由于題中給出的是一個完全圖的最小生成樹的樹邊见擦,對于題中給出每一條邊(u晓猛,v),顯然u和v并不連通铣耘。因為原圖為一個完全圖渊涝,那么完全圖的部分點構(gòu)成的圖也為完全圖。假設(shè)u所在完全圖G1中偷溺,G1中有點n1個,v所在完全圖G2中钱贯,G2中有點n2個挫掏,那么,連接邊(u秩命,v)尉共,并且使得u,v兩個完全圖合為一個完全圖還需要連n1n2-1條邊弃锐,邊權(quán)至少要大于邊(u袄友,v)的權(quán)值,要讓完全圖邊權(quán)總和最小霹菊,即讓這n1n2-1條邊的邊權(quán)為邊(u杠河,v)的邊權(quán)加1即可。
但我們又想到一個問題浇辜,怎么保證這樣生成的完全圖的最小生成樹和原題相同?顯然唾戚,先連接邊權(quán)大的邊柳洋,在連接邊權(quán)小的邊,前面連接的邊權(quán)較大的邊會被后面邊權(quán)小的邊連接時補全圖為完全圖時的邊替代叹坦。文字難以理解熊镣,這里講一個簡單的例子。
3
2 3 7
1 2 4
沒錯,就是樣例绪囱,只是將第一條邊和第二條邊的位置互換测蹲,處理時我們從前往后處理。第一條邊權(quán)值為7鬼吵,連接后不需要補邊(已經(jīng)為完全圖)扣甲,第二條邊權(quán)值為4,需要補邊(1,3)才能使原圖變?yōu)橥耆珗D齿椅,權(quán)值為當前邊權(quán)值加1琉挖,即為5,顯然涣脚,在最小生成樹中示辈,邊(2,3)會被邊(1,3)替代,即操作不合法遣蚀。
但是矾麻,如果我們保證前面的邊的邊權(quán)小于等于后面的邊權(quán),那么芭梯,求出的完全圖的正確性就有保障了险耀。
根據(jù)上面所講,這題和kruskal是不是很像粥帚?一開始將邊以邊權(quán)從小到大排序胰耗,記錄每個點所在集合中的元素個數(shù)為d[i],對于每一條邊(u芒涡,v)柴灯,邊權(quán)為val,ans+=val+(val+1)(d[root[u]]d[root[v]]-1)其中root[i]表示i所在集合的代表元素费尽。最后輸出ans即可赠群。

#include<cstdio>
#include<algorithm>
using namespace std;
struct node
{
    int x,y,z;
}edge[20005];
int n,fa[20005];
long long ans,d[20005];
bool cmp(node a,node b)
{
    if (a.z<b.z) return true;
    else return false;
}
int find(int x)
{
    if (fa[x]==x) return x;
    fa[x]=find(fa[x]);
    return fa[x];

int main()

    scanf("%d",&n);
    for (int i=1; i<n; i++)
        scanf("%d%d%d",&edge[i].x,&edge[i].y,&edge[i].z);
    sort(edge+1,edge+n,cmp);
    for (int i=1; i<=n; i++)
    {
        fa[i]=i;
        d[i]=1;
    }
    for (int i=1; i<n; i++)
    {
        int rx=find(edge[i].x);
        int ry=find(edge[i].y);
        ans+=edge[i].z+(edge[i].z+1)*(d[rx]*d[ry]-1);
        d[ry]+=d[rx];
        fa[rx]=ry;
    }
    printf("%lld\n",ans);    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市旱幼,隨后出現(xiàn)的幾起案子查描,更是在濱河造成了極大的恐慌,老刑警劉巖柏卤,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冬三,死亡現(xiàn)場離奇詭異,居然都是意外死亡缘缚,警方通過查閱死者的電腦和手機勾笆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桥滨,“玉大人窝爪,你說我怎么就攤上這事弛车。” “怎么了蒲每?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵纷跛,是天一觀的道長。 經(jīng)常有香客問我邀杏,道長贫奠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任淮阐,我火速辦了婚禮叮阅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泣特。我一直安慰自己浩姥,他們只是感情好,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布状您。 她就那樣靜靜地躺著勒叠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪膏孟。 梳的紋絲不亂的頭發(fā)上眯分,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音柒桑,去河邊找鬼弊决。 笑死,一個胖子當著我的面吹牛魁淳,可吹牛的內(nèi)容都是我干的飘诗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼界逛,長吁一口氣:“原來是場噩夢啊……” “哼昆稿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起息拜,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤溉潭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后少欺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喳瓣,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年赞别,在試婚紗的時候發(fā)現(xiàn)自己被綠了畏陕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡氯庆,死狀恐怖蹭秋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情堤撵,我是刑警寧澤仁讨,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站实昨,受9級特大地震影響洞豁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荒给,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一丈挟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧志电,春花似錦曙咽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鱼蝉,卻和暖如春洒嗤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背魁亦。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工渔隶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洁奈。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓间唉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親睬魂。 傳聞我的和親對象是個殘疾皇子终吼,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

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