BZOJ1083: [SCOI2005]繁忙的都市

題意
給定一張圖吗讶,求其最小生成樹中權值最大的邊


要是學習過最小生成樹的相關概念榆纽,就會發(fā)現(xiàn)這道題就是直接考察的最小生成樹动知,只不過題目沒有問你最小生成樹的邊權和晌涕,而是讓你輸出最小生成樹有幾條邊(點數(shù)-1)和權值最大的那條邊的權值。


那么什么是生成樹呢撞鹉?

In the mathematical field of graph theory, a spanning tree T of an undirected graph G is a subgraph that is a tree which includes all of the vertices of G. In general, a graph may have several spanning trees, but a graph that is not connected will not contain a spanning tree (but see Spanning forests below). If all of the edges of G are also edges of a spanning tree T of G, then G is a tree and is identical to T (that is, a tree has a unique spanning tree and it is itself).

Paste_Image.png

如上圖所示疟丙,生成樹就是在給定的圖中選取最少的邊使所有頂點連通,那么最小生成樹就是選取的邊的權值和最小鸟雏。


了解了生成樹的概念享郊,就很容易能明白生成樹只有n-1條邊,其中n表示頂點數(shù)孝鹊。
那么怎么求最小生成樹呢炊琉?
這里我介紹kruscal算法。


克魯斯卡爾算法
該算法用到的是貪心思想又活,將所有的邊按權值排序苔咪,每次都選權值最小的邊锰悼,然后判斷這條邊的兩個頂點是否屬于同一個連通塊,如果不屬于同一個連通塊悼泌,那么這條邊就應屬于最小生成樹松捉,逐漸進行下去,直到連通塊只剩下一個馆里。


kruscal算法的模板代碼如下:

const int maxn=400;//最大點數(shù)
const int maxm=10000;//最大邊數(shù)
int n,m;//n表示點數(shù)隘世,m表示邊數(shù)
struct edge{int u,v,w;} e[maxm];//u,v,w分別表示該邊的兩個頂點和權值
bool cmp(edge a,edge b)
{
    return a.w<b.w;
}
int fa[maxn];//因為需要用到并查集來判斷兩個頂點是否屬于同一個連通塊
int find(int x)
{
    if(x==fa[x]) return x;
    else return fa[x]=find(fa[x]);
}
int kruscal()
{
    int ans=-1;
    sort(e+1,e+1+m,cmp);
    for(int i=1;i<=n;++i) fa[i]=i;//初始化并查集
    int cnt=n;
    for(int i=1;i<=m;++i)
    {
        int t1=find(e[i].u);
        int t2=find(e[i].v);
        if(t1!=t2)
        {
            if(cnt==1) break;
            fa[t1]=t2;
            ans=max(ans,e[i].w);
            cnt--;
        }
    }
    return ans;
}

針對這道題,我們只需要把ans+=e[i].w改為ans=max(ans,e[i].w)就好了鸠踪,至此問題得到了解決丙者。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=400;
const int maxm=10000;
int n,m;
struct edge{int u,v,w;} e[maxm];
bool cmp(edge a,edge b)
{
    return a.w<b.w;
}
int fa[maxn];
int find(int x)
{
    if(x==fa[x]) return x;
    else return fa[x]=find(fa[x]);
}
int kruscal()
{
    int ans=-1;
    sort(e+1,e+1+m,cmp);
    for(int i=1;i<=n;++i) fa[i]=i;
    int cnt=n;
    for(int i=1;i<=m;++i)
    {
        int t1=find(e[i].u);
        int t2=find(e[i].v);
        if(t1!=t2)
        {
            if(cnt==1) break;
            fa[t1]=t2;
            ans=max(ans,e[i].w);
            cnt--;
        }
    }
    return ans;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;++i) cin>>e[i].u>>e[i].v>>e[i].w;
    cout<<n-1<<" ";//生成樹有n-1條邊
    cout<<kruscal(); 
    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市营密,隨后出現(xiàn)的幾起案子械媒,更是在濱河造成了極大的恐慌,老刑警劉巖评汰,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纷捞,死亡現(xiàn)場離奇詭異,居然都是意外死亡被去,警方通過查閱死者的電腦和手機主儡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惨缆,“玉大人糜值,你說我怎么就攤上這事∨髂” “怎么了寂汇?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捣染。 經常有香客問我骄瓣,道長,這世上最難降的妖魔是什么耍攘? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任榕栏,我火速辦了婚禮,結果婚禮上少漆,老公的妹妹穿的比我還像新娘。我一直安慰自己硼被,他們只是感情好示损,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嚷硫,像睡著了一般检访。 火紅的嫁衣襯著肌膚如雪始鱼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天脆贵,我揣著相機與錄音医清,去河邊找鬼。 笑死卖氨,一個胖子當著我的面吹牛会烙,可吹牛的內容都是我干的。 我是一名探鬼主播筒捺,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柏腻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了系吭?” 一聲冷哼從身側響起五嫂,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肯尺,沒想到半個月后沃缘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡则吟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年槐臀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逾滥。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡峰档,死狀恐怖,靈堂內的尸體忽然破棺而出寨昙,到底是詐尸還是另有隱情讥巡,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布舔哪,位于F島的核電站欢顷,受9級特大地震影響,放射性物質發(fā)生泄漏捉蚤。R本人自食惡果不足惜抬驴,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缆巧。 院中可真熱鬧布持,春花似錦、人聲如沸陕悬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胧卤,卻和暖如春唯绍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枝誊。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工况芒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叶撒。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓绝骚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親痊乾。 傳聞我的和親對象是個殘疾皇子皮壁,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,743評論 0 33
  • 課程介紹 先修課:概率統(tǒng)計哪审,程序設計實習蛾魄,集合論與圖論 后續(xù)課:算法分析與設計,編譯原理湿滓,操作系統(tǒng)滴须,數(shù)據庫概論,人...
    ShellyWhen閱讀 2,283評論 0 3
  • 提到健身,你腦海里會出現(xiàn)什么畫面朝氓? 肌肉男魔市? 性感翹臀? 我想不管怎樣赵哲,應該沒有人會拒絕好的身材待德。 但好的身材,強...
    魚咔咔咔閱讀 618評論 1 1
  • 有的演講讓一個好想法渣到萬劫不復枫夺,有的演講卻讓一個爛產品華麗轉身将宪,天網恢恢,疏而不漏橡庞,這其中的奧秘究竟是什么=咸场!扒最!...
    求愚閱讀 674評論 4 8
  • 孩子正式上幼兒園了丑勤,遇到的最棘手的問題是孩子的接送。幼兒園在幾條道路的交匯處吧趣,堵車相當嚴重法竞,自己開車肯定是不行的除呵。...
    峽溪飛瀑閱讀 172評論 0 3