ZOJ1586 QS Network
2016-04-08 13:02
946 查看
一.原题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=586
二.题目大意:说了那么多,就是给一个邻接矩阵,让你求最短路,注意要边的权要先加上2个点的适配器价格之和。
三.代码:
二.题目大意:说了那么多,就是给一个邻接矩阵,让你求最短路,注意要边的权要先加上2个点的适配器价格之和。
三.代码:
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <cstring> #include <queue> using namespace std; const int MAX_SIZE = 1002, INF = 0x3f3f3f3f, MOD = 1000000007; int nodeNum, nodeCost[MAX_SIZE], graph[MAX_SIZE][MAX_SIZE], lowCost[MAX_SIZE]; int Prim(int start) { int i, j, minEdge, res, v; for(i = 0; i < nodeNum; i++) lowCost[i] = graph[start][i]; lowCost[start] = -1; res = 0; for(i = 1; i < nodeNum; i++){ minEdge = INF; for(j = 0; j < nodeNum; j++) if(lowCost[j] != -1 && lowCost[j] < minEdge){ minEdge = lowCost[j]; v = j; } lowCost[v] = -1; res += minEdge; for(j = 0; j < nodeNum; j++) if(lowCost[j] > graph[v][j]) lowCost[j] = graph[v][j]; } return res; } int main() { //freopen("in.txt", "r", stdin); int i, j, test; cin>>test; while(test--){ cin>>nodeNum; for(i = 0; i < nodeNum; i++) cin>>nodeCost[i]; for(i = 0; i < nodeNum; i++) for(j = 0; j < nodeNum; j++){ cin>>graph[i][j]; graph[i][j] += nodeCost[i] + nodeCost[j]; } cout<<Prim(0)<<endl; } }
相关文章推荐
- runLoop 添加timer的正确方式 (ios oc)
- ios多工程依赖
- OSI七层参考模型 TCP与UDP、IP、ICMP 如何编写Socket套接字? 端口号
- 常见面试题整理+网易实习生面试
- 二项堆 Binomial Heap 与 二项树 Binomial Tree 性质探究(主要针对归并 merge 操作)
- 彩虹牌汉堡包
- iOS开发之自定义UITableView
- MyBatis (3)——优化MyBatis配置文件中的配置
- 剑指offer-面试题31.连续子数组的最大和
- HDU4717
- Python——在Linux和Windows下创建Django项目
- C++ string 与 C char *
- Android Studio配置初识
- UVA 11529-Strange Tax Calculation-求三角形内点数 /二分/two pointers
- 常见js 函数集合总结
- Android Studio配置初识
- 常见网站盈利模式
- 经典SQL语句大全、50个常用的sql语句
- mysql锁等待分析
- 【ThinkingInC++】75、多重继承