POJ1751 Highways(Prim)
| Time Limit: 1000MS | Memory Limit: 10000K | |||
| Total Submissions: 13182 | Accepted: 3814 | Special Judge | ||
Description
Flatopian towns are numbered from 1 to N and town i has a position
given by the Cartesian coordinates (xi, yi). Each highway connects
exaclty two towns. All highways (both the original ones and the ones
that are to be built) follow straight lines, and thus their length is
equal to Cartesian distance between towns. All highways can be used in
both directions. Highways can freely cross each other, but a driver can
only switch between highways at a town that is located at the end of
both highways.
The Flatopian government wants to minimize the cost of building new
highways. However, they want to guarantee that every town is
highway-reachable from every other town. Since Flatopia is so flat, the
cost of a highway is always proportional to its length. Thus, the least
expensive highway system will be the one that minimizes the total
highways length.
Input
input consists of two parts. The first part describes all towns in the
country, and the second part describes all of the highways that have
already been built.
The first line of the input file contains a single integer N (1
<= N <= 750), representing the number of towns. The next N lines
each contain two integers, xi and yi separated by a space. These values
give the coordinates of ith town (for i from 1 to N). Coordinates will have an absolute value no greater than 10000. Every town has a unique location.
The next line contains a single integer M (0 <= M <= 1000),
representing the number of existing highways. The next M lines each
contain a pair of integers separated by a space. These two integers give
a pair of town numbers which are already connected by a highway. Each
pair of towns is connected by at most one highway.
Output
to the output a single line for each new highway that should be built in
order to connect all towns with minimal possible total length of new
highways. Each highway should be presented by printing town numbers that
this highway connects, separated by a space.
If no new highways need to be built (all towns are already
connected), then the output file should be created but it should be
empty.
Sample Input
9
1 5
0 0
3 2
4 5
5 1
0 4
5 2
1 2
5 3
3
1 3
9 7
1 2
Sample Output
1 6
3 7
4 9
5 7
8 3
【题意】给你N个城市的坐标,城市之间存在公路,但是由于其中一些道路损坏了,需要维修,维修的费用与公路长成正比(公路是直的)。
但现有M条公路是完整的,不需要维修,下面有M行,表示不需要维修的道路两端的城市,问最短费用。
【分析】一道典型的最小生成树题,lowcost[i]数组存还未处理的城市i离已经处理过的城市的最短距离,pre[i]]数组存还未处理的
城市i离已经处理过的哪个城市最近。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#include<functional>
#define mod 1000000007
#define inf 0x3f3f3f3f
#define pi acos(-1.0)
using namespace std;
typedef long long ll;
const int N=;
const int M=;
int n,m,k,edg[N][N],x[N],y[N],lowcost[N],pre[N];
void Prim() {
for(int i=;i<=n;i++){
lowcost[i]=edg[][i];
pre[i]=;
}
lowcost[]=-;
for(int i=;i<n;i++){
int minn=inf;
for(int j=;j<=n;j++){
if(lowcost[j]!=-&&lowcost[j]<minn){
minn=lowcost[j];
k=j;
}
}
if(lowcost[k]!=)printf("%d %d\n",pre[k],k);
lowcost[k]=-;
for(int j=;j<=n;j++){
if(edg[j][k]<lowcost[j]){
lowcost[j]=edg[j][k];
pre[j]=k;
}
}
}
}
int main() {
while(~scanf("%d",&n)) {
for(int i=; i<=n; i++) {
scanf("%d%d",&x[i],&y[i]);
for(int j=; j<i; j++)
edg[i][j]=edg[j][i]=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
edg[i][i]=inf;
}
scanf("%d",&m);
for(int i=; i<m; i++) {
int ita,itb;
scanf("%d%d",&ita,&itb);
edg[ita][itb]=edg[itb][ita]=;
}
Prim();
}
return ;
}
POJ1751 Highways(Prim)的更多相关文章
- Highways POJ-1751 最小生成树 Prim算法
Highways POJ-1751 最小生成树 Prim算法 题意 有一个N个城市M条路的无向图,给你N个城市的坐标,然后现在该无向图已经有M条边了,问你还需要添加总长为多少的边能使得该无向图连通.输 ...
- 快速切题 poj 2485 Highways prim算法+堆 不完全优化 难度:0
Highways Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 23033 Accepted: 10612 Descri ...
- POJ-1751 Highways(最小生成树消边+输出边)
http://poj.org/problem?id=1751 Description The island nation of Flatopia is perfectly flat. Unfortun ...
- POJ 2485 Highways (prim最小生成树)
对于终于生成的最小生成树中最长边所连接的两点来说 不存在更短的边使得该两点以不论什么方式联通 对于本题来说 最小生成树中的最长边的边长就是使整个图联通的最长边的边长 由此可知仅仅要对给出城市所抽象出的 ...
- POJ1751 Highways【最小生成树】
题意: 给你N个城市的坐标,城市之间存在公路,但是由于其中一些道路损坏了,需要维修,维修的费用与公路长成正比(公路是直的). 但现有M条公路是完整的,不需要维修,下面有M行,表示不需要维修的道路两端的 ...
- POJ1751 Highways 2017-04-14 15:46 70人阅读 评论(0) 收藏
Highways Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14819 Accepted: 4278 Speci ...
- POJ1751 Highways
题目链接 http://poj.org/problem?id=1751 题目大意:输入n:然后给你n个点的坐标(任意两点之间皆可达):输入m:接下来m行每行输入两个整数x,y表示 点x与点y 已 ...
- Highways(prim)
http://poj.org/problem?id=2485 此题是求最小生成树里的最大权值.prim算法: #include<stdio.h> #include<string.h& ...
- 最小生成树练习3(普里姆算法Prim)
风萧萧兮易水寒,壮士要去敲代码.本女子开学后再敲了.. poj1258 Agri-Net(最小生成树)水题. #include<cstdio> #include<cstring> ...
随机推荐
- C# 获取ORACLE SYS.XMLTYPE "遇到不支持的 Oracle 数据类型 USERDEFINED"
1.需要加函数 2.需要加表别名 select a.XML.getclobval() from TB1 a
- [洛谷P1231] 教辅的组成
题目大意:有n1本书,n2本练习册和n3个答案,然后又一些条件,说明某本答案可能和某本书对应,某本练习册可能和某本书对应,求最多有多少本完整的书(有书,练习册,答案) 题解:网络流,对应就连边,然后考 ...
- [洛谷P1317]低洼地
题目大意:一组数,分别表示地平线的高度变化.高度值为整数,相邻高度用直线连接.找出并统计有多少个可能积水的低洼地?(首尾都为0) 题解:求出其中都多少个不严格下降子段和不严格上升子段所夹的位置,即为答 ...
- MySQL之数据库及表的修改和删除
本文章来自实验楼的操作过程和其中相应地解释.(博客园不知道怎么回事,上传图片总是失败.) 一.对数据库修改 1)删除数据库的命令为:DROP DATABASE 数据名; 二.对表的修改 1)重命名一张 ...
- BZOJ3223: Tyvj 1729 文艺平衡树 无旋Treap
一开始光知道pushdown却忘了pushup......... #include<cstdio> #include<iostream> #include<cstring ...
- 使用JMeter进行一次简单的带json数据的post请求测试
使用JMeter进行一次简单的带json数据的post请求测试 原文:https://www.cnblogs.com/summer-mm/p/7717812.html 1.启动jmeter:在bin下 ...
- Spring源码解析-实例化bean对象
spring加载配置文件,AbstractApplicationContext类中的refresh方法起着重要的作用. @Override public void refresh() throws B ...
- [poj 1947]树dp+背包问题
题目链接:http://poj.org/problem?id=1947 看了很多题解都是直接一遍dfs就搞定的方法,但是我实在是没看懂那个转移方程.最后在茫茫博客中终于发现了一个有逻辑的方法,但是复杂 ...
- DIV + CSS问题收集
div里面有三列数据,怎么让他竖向排列,在css中怎么设置 https://zhidao.baidu.com/question/712007772597664245.html css设置块元素在div ...
- npm获取配置值的两种方式
命令行标记 在命令行上放置--foo bar设置foo配置参数为bar. 一个 -- 参数(argument)告诉cli解析器停止读取flags.一个 在命令行结尾的--flag参数(paramete ...