POJ 1797 條件最大產生樹

來源:互聯網
上載者:User

這題做的囧死,看了範例很興奮的寫了個dijkstra交上去WA,重新看了下題目,發現是每條路都有一個最大承載量,好吧,我又想錯了,發現不是網路流,因為範例用最大流說不通,再仔細看了一遍題目,發現是叫你找一條路使得單條路的流量最大,果斷寫了個最大產生樹,覺得最大產生樹的最小邊就是解,叫上去,再次WA。

 

想了一會兒才發現不對,如果有一條路流量很大,但是這條路建出來的時候產生樹沒有建好呢?後來在Kruskal函數裡加了一句很重要的話,果斷AC。。。。。

 

本題的思路就是求最大產生樹,當1和n在一個集合裡的時候就返回最小邊權,這個邊權就是解。

 

My Code:

#include <cstdio><br />#include <cstdlib><br />#include <cstring><br />#include <algorithm><br />using namespace std;<br />const int MAX=1100;<br />const int oo=0x3f3f3f3f;<br />struct Edge{<br />int u,v,len;</p><p>bool operator<(const Edge& e) const{<br />return len>e.len;<br />}</p><p>void read(){<br />scanf("%d%d%d",&u,&v,&len);<br />}<br />}e[MAX*MAX];<br />int p[MAX],rank[MAX],n,m;<br />void init(){<br />for(int i=1;i<=n;i++){<br />p[i]=i;<br />rank[i]=0;<br />}<br />}<br />int find(int x){<br />return p[x]=x==p[x]?p[x]:find(p[x]);<br />}<br />void Link(int x,int y){<br />if(rank[x]>rank[y]){<br />p[y]=x;<br />}else{<br />p[x]=y;<br />if(rank[x]==rank[y]){<br />rank[y]++;<br />}<br />}<br />}<br />bool merge(int x,int y){<br />int px=find(x);<br />int py=find(y);</p><p>if(px==py){<br />return false;<br />}<br />Link(px,py);<br />return true;<br />}<br />int Kruskal(){<br />int ret=0;<br />int cnt=1;</p><p>init();<br />sort(e,e+m);<br />for(int i=0;i<m&&cnt<n;i++){<br />if(merge(e[i].u,e[i].v)){<br />cnt++;<br />ret=e[i].len;<br />}<br />if(find(1)==find(n)){<br />break;<br />}<br />}</p><p>return ret;<br />}<br />int main(){<br />int t,cnt=1;<br />bool done=false;</p><p>scanf("%d",&t);<br />while(t--){<br />if(done){<br />puts("");<br />}else{<br />done=true;<br />}<br />scanf("%d%d",&n,&m);<br />for(int i=0;i<m;i++){<br />e[i].read();<br />}<br />printf("Scenario #%d:/n",cnt++);<br />printf("%d/n",Kruskal());<br />}</p><p>return 0;<br />}<br />

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.