但是我一開始總是忘了 把 r 的大小是n*(n-1)/2 WA了好多次?。?!
還有記得先排序噢~
View Code繼續(xù)暢通工程
Time Limit :2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) :9 Accepted Submission(s) : 2
Font: Times New Roman| Verdana | Georgia
Font Size: ← →
Problem Description
省政府“暢通工程”的目標(biāo)是使全省任何兩個村莊間都可以實現(xiàn)公路交通(但不一定有直接的公路相連,只要能間接通過公路可達(dá)即可)?,F(xiàn)得到城鎮(zhèn)道路統(tǒng)計表,表中列出了任意兩城鎮(zhèn)間修建道路的費用,以及該道路是否已經(jīng)修通的狀態(tài)?,F(xiàn)請你編寫程序,計算出全省暢通需要的最低成本。
Input
測試輸入包含若干測試用例。每個測試用例的第1行給出村莊數(shù)目N (1< N < 100 );隨后的 N(N-1)/2 行對應(yīng)村莊間道路的成本及修建狀態(tài),每行給4個正整數(shù),分別是兩個村莊的編號(從1編號到N),此兩村莊間道路的成本,以及修建狀態(tài):1表示已建,0表示未建。
當(dāng)N為0時輸入結(jié)束。
Output
每個測試用例的輸出占一行,輸出全省暢通需要的最低成本。
Sample Input
31 2 1 01 3 2 02 3 4 031 2 1 01 3 2 02 3 4 131 2 1 01 3 2 12 3 4 10
Sample Output
310
View Code#include <stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
#include<cmath>
using std::sort;
int fa[105];
struct node
{
int a, b, c, d;
}r[10000];
int find(int t)
{
if(t == fa[t] )
return t;
else return fa[t] = find(fa[t]);
}
bool merge(int i)
{
int fx = find(r[i].a);
int fy = find(r[i].b);
if( fx == fy )
return 0;
fa[fx]= fy;
return 1;
}
int cmp(node a, node b)
{return a.c <= b.c ; }
int main()
{
int i, a, b, c, d, cnt, ans, n;
while(scanf("%d", &n), n)
{
ans= 0, cnt = 0;
for(i=1; i<=n; i++)
fa[i]= i;
for(i=1; i<=n*(n-1)/2; i++)
{
scanf("%d %d %d %d", &a, &b, &c, &d);
r[i].a= a, r[i].b = b, r[i].c = c, r[i].d = d;
if(d)
merge(i);
}
for(i=1; i<=n; i++)
if(fa[i] == i )
cnt++;
sort( r+1, r+1+n*(n-1)/2, cmp );
for(i=1; i<=n*(n-1)/2 && cnt > 1; i++)
if(r[i].d == 0)
{
if(merge(i))
ans+= r[i].c, cnt--;
}
printf("%d
", ans);
}
return 0;
}
本文標(biāo)題:繼續(xù)暢通工程krusal-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://jinyejixie.com/article28/dphjcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、面包屑導(dǎo)航、服務(wù)器托管、定制開發(fā)、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容