POJ 1751 Highways
来源:互联网 发布:招募淘宝分销商的语句 编辑:程序博客网 时间:2024/05/17 12:46
题目链接:kuangbin带你飞 专题六 最小生成树 H - Highways
题意
n个城市,需要修高速公路,将所有城市联通,已经修建好了m条高速公路,剩下未修的公路,怎样修能够使长度最小,输出这些公路的左右两端城市
思路
典型的最小生成树,因为需要输出边左右结点,维护一个fa[N]数组即可。将已经见好的公路所对应边的权值置为0。还是prim
代码
//// main.cpp// demo//// Created by shiyi-mac on 16/1/2.// Copyright © 2016年 shiyi-mac. All rights reserved.//#include <algorithm>#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <queue>#include <stack>#include <vector>using namespace std;const int N = 759;const int MAX = 1000000;double g[N][N];double d[N];int x[N], y[N];int fa[N];void prim(int n){ for(int i=2;i<=n;i++) { d[i] = g[1][i]; fa[i] = 1; } d[1] = -1; int pos = 0; for(int i=1;i<n;i++) { double min = MAX; int imin = -1; for(int j=1;j<=n;j++) if(d[j]!=-1 && min > d[j]) min = d[j], imin = j; if(min != 0) printf("%d %d\n", imin, fa[imin]); d[imin] = -1; for(int j=1;j<=n;j++) if(d[j]!=-1 && d[j] > g[imin][j]) { d[j] = g[imin][j]; fa[j] = imin; } }}int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&x[i], &y[i]); for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) { double l = sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); g[j][i] = g[i][j] = l; } int q; scanf("%d",&q); for(int i=0;i<q;i++) { int a, b; scanf("%d%d",&a, &b); g[a][b] = g[b][a] = 0; } prim(n); return 0;}
0 0
- poj 1751 Highways
- poj 1751 highways
- Poj 1751 Highways(prim)
- poj 1751 Highways
- poj 1751 Highways MST
- POJ-1751-Highways
- POJ:1751 Highways
- POJ 1751 Highways
- POJ-1751 Highways
- poj-1751-Highways
- POJ 1751 Highways
- poj 1751 Highways
- POJ 1751 Highways
- poj-1751 Highways
- POJ 1751 Highways
- POJ - 1751 Highways
- POJ 1751 Highways
- poj 1751 Highways
- Android拨打电话代码
- Scikit-learn Algorithm Cheat Sheet
- 120_区间埃氏筛
- 获取坐标值的各种方法(图解) - 记录
- n2n vpn搭建
- POJ 1751 Highways
- C++函数模板详解
- R语言的数据导入与导出
- 简单的C程序<四>:删除空白行、反转字符串、字符串替换
- 有上下界的网络流
- 判断一个数是否为素数
- leetcode 107: Binary Tree Level Order Traversal II
- [看书日记20160104]四大组件的工作过程, Activity的生命周期和启动模式
- android shape使用总结