樣例:
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...