poj 2485
2016-08-25 18:17
176 查看
题目概述
有N个地点,地点之间原本没有路,需要修路使所有地点连通,求两地点之间需要修的最长的路的最小值时限
1000ms/3000ms输入
第一行整数times,其后times组数据,每组数据第一行整数N,其后一个N*N矩阵,第i行第j列的值aij代表ij之间路长度限制
3<=N<=500输出
每行一个数,为所求最长的路的最小值样例输入
13
0 990 692
990 0 179
692 179 0
样例输出
692讨论
图论,最小生成树,prim算法,没什么可说的,题目已经很直白了只不过数据量看上去有点大
题解状态
564K,172MS,C++,946B题解代码
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; #define INF 0x3f3f3f3f #define MAXN 503 #define memset0(a) memset(a,0,sizeof(a)) int N;//地点总数 int graph[MAXN][MAXN], dis[MAXN];//邻接矩阵 最小生成树上两点间边长 bool mk[MAXN];//已在树上的标记 int fun() { for (int p = 0; p < N; p++) for (int i = 0; i < N; i++) scanf("%d", &graph[p][i]);//input mk[0] = 1;//下面是prim算法主体 for (int p = 0; p < N; p++) dis[p] = graph[0][p]; int most = -INF; for (int p = 1; p < N; p++) { int least = INF, pos; for (int p = 0; p < N; p++) { if (!mk[p] && least>dis[p]) { least = dis[p]; pos = p; } } mk[pos] = 1; most = max(most, least);//题目求的是最长的一段 for (int p = 0; p < N; p++) if (!mk[p] && dis[p]>graph[pos][p]) dis[p] = graph[pos][p]; } return most; } int main(void) { //freopen("vs_cin.txt", "r", stdin); //freopen("vs_cout.txt", "w", stdout); int times; scanf("%d", ×);//input while (times--) { scanf("%d", &N);//input printf("%d\n", fun());//output memset0(mk); } }
EOF
相关文章推荐
- POJ 2485
- POJ 2485 Highways
- POJ 2485(建高速公路__最小生成树)
- POJ 2485 -- Highways
- POJ 2485 Highways(最小生成树Prim算法)
- POJ训练计划2485_Highways(最小生成树)
- POJ 2485 Highways (prim最小生成树)
- POJ 2485 Highways
- poj 2485 Highways
- poj 2485 Highways
- poj2485 Highways
- POJ 2485 Highways (最小生成树)
- POJ - 2485 Highways解题报告
- poj-2485-最小生成树prim算法模板
- poj 2485 Highways
- poj 2485 Highways (最小生成树)
- Prim算法求最大权,POJ(2485)
- poj 2485 Prim
- POJ 2485:Highways(最小生成树&&prim)
- poj 2485 Highways 最小生成树