南阳理工OJ_题目38 布线问题
2014-05-19 18:08
274 查看
//最小生成树 #include <iostream> using namespace std; int prim(); int v; int e; int g[505][505]; int min_v; int main() { int T; cin >> T; while(T--) { cin >> v >>e; for(int i = 0; i <= v; i++) for(int j = 0; j <= v; j++) g[i][j] = 1 << 30; for(int i = 1; i <= e; i++) { int a, b; cin >> a >> b; cin >> g[a][b]; g[b][a] = g[a][b]; } min_v = 1 << 30; for(int i = 1; i <= v; i++) { int t; cin >> t; min_v = min_v < t ? min_v : t; } cout << (prim() + min_v) << '\n'; } } int prim() { int lowcost[505] = {0}; int nearvex[505] = {0}; nearvex[1] = -1; for(int i = 2; i <= v; i++) lowcost[i] = g[1][i]; for(int i = 2; i <= v; i++) { int min_cost = 1 << 30; int sit; for(int j = 1; j <= v; j++) if(nearvex[j] != -1 && lowcost[j] < min_cost) { min_cost = lowcost[j]; sit = j; } nearvex[sit] = -1; for(int i = 1; i <= v; i++) { if(g[sit][i] < lowcost[i] && nearvex[i] != -1) { lowcost[i] = g[sit][i]; nearvex[i] = sit; } } } int sum = 0; for(int i = 1; i <= v; i++) sum += lowcost[i]; return sum; }
相关文章推荐
- 南阳理工 oj 题目38 布线问题
- HDOJ 题目38 布线问题(最小生成树)
- NYOJ--38(图论)-题目--------------------------------布线问题
- NYOJ 题目38 布线问题 (最小生成树 普里姆算法)
- 南阳理工OJ题目2-------------括号配对问题 栈的使用
- 南阳理工OJ_题目14 会场安排问题
- 南阳理工OJ 题目42 一笔画问题
- 南阳理工oj 题目26 孪生素数问题 素数筛选法
- NYIST OJ 题目38 布线问题
- NYOJ 题目38 布线问题
- 南阳理工OJ_题目47 过河问题
- 南阳理工oj题目练习---括号配对问题
- NY--38 -- 布线问题 [prim算法求最小生成树]
- NYOJ 38-布线问题:最小生成树
- Nyoj 38 布线问题[最小生成树(Prim&&Kruscal)]
- 【AC】九度OJ题目1153:括号匹配问题
- 南阳理工 oj14 会场安排问题
- 南阳理工OJ_开灯问题
- nyoj-38-布线问题
- [置顶] NYOJ38 布线问题