POJ1751 Highways
题目链接 http://poj.org/problem?id=1751
题目大意:输入n;然后给你n个点的坐标(任意两点之间皆可达);输入m;接下来m行每行输入两个整数x,y表示 点x与点y 已经相连;
问连接所有点至少还需要连接哪些点(并且使连接后总距离最短),并输出连接的点对。
思路:最小生成树,用prim或者kruskal,我是用prim写的,
所以处理已连接的m个点对时,只需将两个点之间的距离设为0即可,这样进行算法时,
会优先处理已连接的点。然后输出点对时,判断下d[i]是否为0,若为0,则是已经连接过的点,否则输出
AC代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
using namespace std;
#define gamma 0.5772156649015328606065120
#define MOD 1000000007
#define inf 0x3f3f3f3f
#define N 800
typedef long long LL;
typedef pair<int,int> PII; struct COORD
{
int x,y;
} coord[N];
int n,pic[N][N],path[N],vis[N],d[N]; void prim()
{
memset(vis,,sizeof(vis));
for(int i=; i<=n; ++i)
d[i]=pic[][i];
vis[]=;
for(int j=; j<n; ++j)
{
int fm=inf,u;
for(int i=; i<=n; ++i)
if(!vis[i]&&d[i]<fm)
fm=d[u=i];
vis[u]=;
if(d[u]) //若d[u]==0则是题目中已连接的点,跳过
{
if(!path[u]) printf("%d %d\n",,u); //若path[u]==0则是与点1相连
else printf("%d %d\n",path[u],u);
}
for(int i=; i<=n; ++i)
if(!vis[i]&&pic[u][i]<d[i])
{
path[i]=u;
d[i]=pic[u][i];
}
}
} int main()
{
int dis,x,y,m;
scanf("%d",&n);
for(int i=; i<=n; ++i) scanf("%d%d",&coord[i].x,&coord[i].y);
for(int i=; i<=n; ++i)
for(int j=i+; j<=n; ++j)
{
dis=(coord[i].x-coord[j].x)*(coord[i].x-coord[j].x)+(coord[i].y-coord[j].y)*(coord[i].y-coord[j].y);
pic[i][j]=pic[j][i]=dis;
}
scanf("%d",&m);
for(int i=; i<=m; ++i)
{
scanf("%d%d",&x,&y);
pic[x][y]=pic[y][x]=;
}
memset(path,,sizeof(path)); //path数组记录点对
prim();
return ;
}
POJ1751 Highways的更多相关文章
- POJ1751 Highways 2017-04-14 15:46 70人阅读 评论(0) 收藏
Highways Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14819 Accepted: 4278 Speci ...
- POJ1751 Highways(Prim)
Highways Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13182 Accepted: 3814 Speci ...
- POJ-1751 Highways(最小生成树消边+输出边)
http://poj.org/problem?id=1751 Description The island nation of Flatopia is perfectly flat. Unfortun ...
- POJ1751 Highways【最小生成树】
题意: 给你N个城市的坐标,城市之间存在公路,但是由于其中一些道路损坏了,需要维修,维修的费用与公路长成正比(公路是直的). 但现有M条公路是完整的,不需要维修,下面有M行,表示不需要维修的道路两端的 ...
- 最小生成树练习3(普里姆算法Prim)
风萧萧兮易水寒,壮士要去敲代码.本女子开学后再敲了.. poj1258 Agri-Net(最小生成树)水题. #include<cstdio> #include<cstring> ...
- Highways POJ-1751 最小生成树 Prim算法
Highways POJ-1751 最小生成树 Prim算法 题意 有一个N个城市M条路的无向图,给你N个城市的坐标,然后现在该无向图已经有M条边了,问你还需要添加总长为多少的边能使得该无向图连通.输 ...
- C - Highways poj1751最小生成树
The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has a very poor system of p ...
- POJ-1751(kruskal算法)
Highways POJ-1751 注意这里的样例答案也是对的,只是输出顺序改变,但是这也没关系,因为题目加了特殊判断. #include<iostream> #include<cs ...
- H:Highways
总时间限制: 1000ms 内存限制: 65536kB描述The island nation of Flatopia is perfectly flat. Unfortunately, Flatopi ...
随机推荐
- SQL Server 2016 Community Technology Preview 3.3
https://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2016 SQL Server 2016 Community Techno ...
- ssl生成证书
凝雨 - Yun 快乐编程每一天 - Happy Coding Every Days HOME ARCHIVES CATEGORIES TAGS ABOUT Openssl生成自签名证书,简单步骤 P ...
- app接口开发(php)
1.JSON方式封装通信接口: 封装: response.php <?php // JSON方式封装通信接口 // 定义 response类 class Response { // 定义一个静态 ...
- windows盘符操作
subst subst x: /d subst y: e:\
- 读写锁pthread_rwlock_t的使用(转)
读写锁是用来解决读者写者问题的,读操作可以共享,写操作是排他的,读可以有多个在读,写只有唯一个在写,同时写的时候不允许读. 具有强读者同步和强写者同步两种形式 强读者同步:当写者没有进行写操作,读者就 ...
- 【BIEE】16_饼图应用
在BIEE中,我们可以使用饼图来展示报表数据 饼图在使用中有三元素:①切片 ②饼图 ③度量 那么我们来分别看下这三个元素的功能分别是什么? 我们通过上图可以看出度量中存在2个度量,那么此时的饼图数量是 ...
- PNP管理器简析--基于ReactOS0.33
CSDN上转悠了一圈发现关于PNP管理的文章不多.那就由我献个丑,记录自己对PNP管理器的看法. pnp管理器被描写叙述为向内核和应用程序提供关于设备拔插的通知,凭感觉,pnp管理器应该是个线程函数等 ...
- Sonatype Nexus
Maven 常用的仓库管理http://zh.wikipedia.org/wiki/Apache_Maven
- Mac+docker+flask
1.先要保证mac电脑安装docker 安装的话可以通过命令brew install docker 安装成功后启动,docker 然后在终端执行docker version 或者docker info ...
- 通过 P3P规范让IE跨域接受第三方cookie session
所谓第三方 cookie,就是说你访问网页 A,却接收到域名 B 的 cookie 设定指令.这可能是由于网页 A 请求或链接了 B 的网页,比如上面提到的 iframe 以及 jsonp. 我查到了 ...