HDU 1879 繼續暢通工程(最小生成樹問題)

2021-10-09 03:55:40 字數 1708 閱讀 1361

樣例:

sample input31

2101

3202

3403

1210

1320

2341

3121

0132

1234

10sample output31

0

題意:給定n個村莊數目,以及村莊之間的資訊,問連通這些村莊的最小成本。

解題思路:這道題給出的資訊為邊,所以我們用kruskal演算法來寫。對於輸入資料要注意的是有乙個標誌flag表示其中兩個村莊是否修建。如果已經修建我們要將之間的消耗成本更改為0。其他的和kruskal演算法模板一樣,若對kruskal演算法不填熟悉的話,這裡指路一篇blog:

ac**:

/*

*blog:

#include

//poj不支援

#define rep(i,a,n) for (int i=a;i<=n;i++)

//i為迴圈變數,a為初始值,n為界限值,遞增

#define per(i,a,n) for (int i=a;i>=n;i--)

//i為迴圈變數, a為初始值,n為界限值,遞減。

#define pb push_back

#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)

#define fi first

#define se second

#define mp make_pair

using

namespace std;

const

int inf =

0x3f3f3f3f

;//無窮大

const

int maxn =

1e5;

//最大值。

typedef

long

long ll;

typedef

long

double ld;

typedef pair pll;

typedef pair<

int,

int> pii;

//*******************************分割線,以上為自定義**模板***************************************//

struct edge};

edge edges[maxn]

;int verx[maxn]

;//verx[i]代表i村莊所屬的連通分量。

int n,cnt;

//n個村莊,cnt代表邊數。

int u,v,w;

//臨時變數。

bool flag;

void

kruskal()

sum+

=edges[i]

.w;}

} cout<

}int

main()

}kruskal()

;}return0;

}

繼續暢通工程 hdu 1879

include 2243673 2010 03 24 20 56 41 accepted 1879 375ms 320k 1070 b c 悔惜晟 include 修改了三次終於ac,為何就是 的效率不高 include include using namespace std int s 4991 ...

hdu 1879 繼續暢通工程

include include include typedef structedge edge input 5050 int cost 5050 int parent 5050 int cmp const void a,const void b int root int n int kruskal ...

HDU 1879 繼續暢通工程

和前幾個最小生成樹有點不一樣的地方就是 在kruskal裡面,要先把已經修通的路排在前面 不知道這樣是不是多此一舉呢 再按照每條路的價值從小到大排序 自定義排序規則就是 呼叫c 的sort int cmp const e a,const e b 將每條邊存在結構體edge裡面 struct e ed...