POJ 1751 Highways(最小生成树&Prim)题解
思路:
一开始用Kruskal超时了,因为这是一个稠密图,边的数量最惨可能N^2,改用Prim。
Prim是这样的,先选一个点(这里选1)作为集合A的起始元素,然后其他点为集合B的元素,我们要做的就是每次找到B中的一个点,满足这个点到A的权值是B到A的权值中最小的,然后我们把这个点加入到A,再更新B中的点到A的最小距离。
代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int N = 750+5;
int mp[N][N]; //i j的距离
int vis[N];
int dis[N]; //点到集合的最小距离
int lian[N];
int n;
struct node{
int x,y;
}p[N];
void init(){
for(int i = 1;i <= n;i++){ //建图
scanf("%d%d",&p[i].x,&p[i].y);
for(int j = 1;j <= i;j++){
mp[i][j] = mp[j][i] = (p[i].x - p[j].x)*(p[i].x - p[j].x) + (p[i].y - p[j].y)*(p[i].y - p[j].y);
}
}
int Q,a,b;
scanf("%d",&Q);
while(Q--){
scanf("%d%d",&a,&b);
mp[a][b] = mp[b][a] = 0;
}
memset(vis,0,sizeof(vis)); //标记该点是否连接
for(int i = 1;i <= n;i++){
dis[i] = mp[i][1];
lian[i] = 1; //初始都和1的距离最小
}
vis[1] = 1;
}
void Prim(){
for(int i = 1;i < n;i++){ //找n-1条边
int MIN = 100000005;
int point;
for(int j = 1;j <= n;j++){
if(!vis[j] && dis[j] < MIN){
MIN = dis[j];
point = j;
}
}
vis[point] = 1; //找到了
if(mp[point][lian[point]] != 0) //为零是已经有路的
printf("%d %d\n",point,lian[point]); //点和他相连的点
for(int j = 1;j <= n;j++){
if(!vis[j] && mp[j][point] < dis[j]){
lian[j] = point;
dis[j] = mp[j][point];
}
}
}
}
int main(){
scanf("%d",&n);
init();
Prim();
return 0;
}
POJ 1751 Highways(最小生成树&Prim)题解的更多相关文章
- POJ 1751 Highways(最小生成树Prim普里姆,输出边)
题目链接:点击打开链接 Description The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has ...
- POJ 1751 Highways (最小生成树)
Highways Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- POJ 1751 Highways (最小生成树)
Highways 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/G Description The island nation ...
- POJ 1751 Highways 【最小生成树 Kruskal】
Highways Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23070 Accepted: 6760 Speci ...
- POJ 1751 Highways (kruskal)
题目链接:http://poj.org/problem?id=1751 题意是给你n个点的坐标,然后给你m对点是已经相连的,问你还需要连接哪几对点,使这个图为最小生成树. 这里用kruskal不会超时 ...
- POJ 2485 Highways(最小生成树+ 输出该最小生成树里的最长的边权)
...
- Building a Space Station POJ 2031 【最小生成树 prim】
http://poj.org/problem?id=2031 Description You are a member of the space station engineering team, a ...
- poj 2485 Highways 最小生成树
点击打开链接 Highways Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19004 Accepted: 8815 ...
- (poj) 1751 Highways
Description The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has a very poor ...
随机推荐
- Balanced Lineup---poj3264线段树基础
题目链接 求对应区间最大值与最小值的差: #include<stdio.h> #include<string.h> #include<algorithm> #inc ...
- function $(id) {}表示什么函数
function $(id) {}表示什么函数 一.总结 1.就是简写,不然每次打document.getElementById很烦 二.问题 function $(id) {return docum ...
- requests库的get请求,带有cookies
(一)如何带cookies请求 方法一:headers中带cookies #coding:utf-8 import requests import re # 构建url url = 'http://w ...
- orm之路由层
一.简单配置 1.参数 第一个参数是正则表达式(如果要精准匹配:‘^publish/$’),或者加斜杠('^publish/') 第二个参数是视图函数(不要加括号) urlpatterns = [ u ...
- jenkins 项目发布脚本
构建shell #!/bin/bash ########################################################################## 编译部分 ...
- jquery closest & parent比较
.closest() .parents() 从当前元素开始 从父元素开始 沿 DOM 树向上遍历,直到找到已应用选择器的一个匹配为止. 沿 DOM 树向上遍历,直到文档的根元素为止,将每个祖先元素添加 ...
- OpenCV中PCA实现人脸降维
前言: PCA是大家经常用来减少数据集的维数,同时保留数据集中对方差贡献最大的特征来达到简化数据集的目的.本文通过使用PCA来提取人脸中的特征脸这个例子,来熟悉下在oepncv中怎样使用PCA这个类. ...
- 常用jquery记录
1.jquery easing jQuery Easing是一款比较老的jQuery插件,在很多网站都有应用,尤其是在一些页面滚动.幻灯片切换等场景应用比较多.它非常小巧,且有多种动画方案供选择,使用 ...
- mysql事务(一)——redo log与undo log
数据事务 即支持ACID四大特性. A:atomicity 原子性——事务中所有操作要么全部执行成功,要么全部执行失败,回滚到初始状态 C:consistency 一致性—— ...
- 2018-2019-2 20165209 《网络对抗技术》Exp4:恶意代码分析
2018-2019-2 20165209 <网络对抗技术>Exp4:恶意代码分析 1 基础问题回答和实验内容 1.1基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监 ...