Poj 3771 hdu 3405
poj 3771 http://poj.org/problem?id=3771
wiki Prim http://zh.wikipedia.org/wiki/%E6%99%AE%E6%9E%97%E5%A7%86%E7%AE%97%E6%B3%95
prim 算法水题
之前写过类似的题,一直以为直接暴力,从遍历所有的点为起点,寻找距离起点最短的点然后再在改点上寻找最短距离 这摆明了是划线嘛……根本不是图论啊啊啊!!!!
这样真是萌萌哒……
正确的做法是先枚举所有的点作为起点,然后把距离长的点更新
这是主要的思路代码
int lowcost[MAXN];
int prim(int v0){
for(int i = ;i < n;i++){ //初始化
lowcost[i] = cost[v0][i];
}
int ans = ;
for(int i = ;i < n-;i++){
int mindis = INF;
int minone; //用来标记最小距离
for(j = ;j < n;j++){
if(lowcost[j] && mindis > lowcost[j]){
mindis = lowcost[j];
minone = j;
}
ans += lowcost[minone];
lowcost[minone] = ;
for(int j = ;j < n;j++){ //进行更新
if(cost[minone][j] < lowcost[j]){
lowcost[j] = cost[j][minone];
}
}
}
}
return ans;
}
代码:非原创……!!!!
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib> const int MAXN = + ;
const double ESP = 10e-;
const double Pi = atan(1.0) * ;
const int INF = 0xffffff;
const int MOD = ; using namespace std;
struct Point{
int x;
int y;
};
Point a[MAXN];
bool vis[MAXN];
int n;
double graph[MAXN][MAXN];
double getl(int i,int j){
int x = a[i].x - a[j].x;
int y = a[i].y - a[j].y;
return sqrt(1.0*x*x+1.0*y*y);
}
double prim(int x){
int mark;
bool vis[MAXN];
memset(vis,,sizeof(vis));
vis[x] = ;
double dis[MAXN];
for(int i = ;i < n;i++){
dis[i] = graph[i][];
}
vis[] = ;
if(!x){
for(int i = ;i < n;i++){
dis[i] = graph[i][];
}
vis[] = ;
}
double MIN,SUM = ;
for(int k = ;k < n-;k++){
MIN = INF;
for(int i = ;i < n;i++){
if(!vis[i] && MIN > dis[i]){
MIN = dis[i];
mark = i;
}
}
SUM += MIN;
vis[mark] = ;
for(int i = ;i < n;i++){
if(!vis[i] && dis[i] > graph[mark][i]){
dis[i] = graph[mark][i];
}
}
}
return SUM;
}
int main(){
// freopen("input.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i = ;i < n;i++){
scanf("%d%d",&a[i].x,&a[i].y);
}
for(int i = ;i < n;i++){
for(int j = ;j <= i;j++){
graph[i][j] = graph[j][i] = getl(i,j);
}
}
double h,g = INF;
for(int i = ;i < n;i++){
h = prim(i);
g = min(g,h);
}
printf("%.2lf\n",g);
}
return ;
}
Poj 3771 hdu 3405的更多相关文章
- POJ 2104&HDU 2665 Kth number(主席树入门+离散化)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 50247 Accepted: 17101 Ca ...
- poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题
poj 1251 && hdu 1301 Sample Input 9 //n 结点数A 2 B 12 I 25B 3 C 10 H 40 I 8C 2 D 18 G 55D 1 E ...
- Eight POJ - 1077 HDU - 1043 八数码
Eight POJ - 1077 HDU - 1043 八数码问题.用hash(康托展开)判重 bfs(TLE) #include<cstdio> #include<iostream ...
- POJ 1177/HDU 1828 picture 线段树+离散化+扫描线 轮廓周长计算
求n个图矩形放下来,有的重合有些重合一部分有些没重合,求最后总的不规则图型的轮廓长度. 我的做法是对x进行一遍扫描线,再对y做一遍同样的扫描线,相加即可.因为最后的轮廓必定是由不重合的线段长度组成的, ...
- POJ 1308&&HDU 1272 并查集判断图
HDU 1272 I - 小希的迷宫 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- POJ 1077 && HDU 1043 Eight A*算法,bfs,康托展开,hash 难度:3
http://poj.org/problem?id=1077 http://acm.hdu.edu.cn/showproblem.php?pid=1043 X=a[n]*(n-1)!+a[n-1]*( ...
- POJ 2342 &&HDU 1520 Anniversary party 树形DP 水题
一个公司的职员是分级制度的,所有员工刚好是一个树形结构,现在公司要举办一个聚会,邀请部分职员来参加. 要求: 1.为了聚会有趣,若邀请了一个职员,则该职员的直接上级(即父节点)和直接下级(即儿子节点) ...
- POJ 1904 HDU 4685
这两道题差不多,POJ这道我很久以前就做过,但是比赛的时候居然没想起来.. POJ 这道题的题意是,N个王子每个人都有喜欢的公主,当他们选定一个公主结婚时,必须是的剩下的人也能找到他喜欢的公主结婚. ...
- 【中国剩余定理】POJ 1006 & HDU 1370 Biorhythms
题目链接: http://poj.org/problem?id=1006 http://acm.hdu.edu.cn/showproblem.php?pid=1370 题目大意: (X+d)%23=a ...
随机推荐
- 十:Java之泛型
[定义] 一.泛型的定义主要有下面两种: 在程序编码中一些包括类型參数的类型,也就是说泛型的參数仅仅能够代表类.不能代表个别对象.(这是当今较常见的定义) 在程序编码中一些包括參数的类.其參数能够代表 ...
- [计算机网络] vsftpd的安装与使用
简单介绍: vsftpd是一个能够执行在类UNIX操作系统上的FTPserver软件,它能够执行在Linux.BSD.Solaris.HP-UX等系统上. 1 vsftpd的安装 在ubuntu系统上 ...
- C程序设计语言之一
%d 按照十进制整形数打印: %o 按照八进制整形数打印: %x 按照十六进制整形数打印: %c 表示字符 %s 表示字符串 %% 表示%本身打印: %ld long型输出 ”幻数“: #define ...
- html的头部标签详解
<!DOCTYPE html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...
- ios多视图开发中:xib与UIViewController的关联
个人感觉ios中的UIViewController和xib文件,分别相当于android的Activity 和Layout文件 当时两者的关联比android稍微复杂些. ios上分别新建的UIVie ...
- BZOJ 1216: [HNOI2003]操作系统( 优先队列 )
按题意用priority_queue模拟即可 ---------------------------------------------------------------------- #inclu ...
- Irrlicht学习之光照的研究
Irrlicht学习之光照的研究 最近研究一下Irrlicht的光照.发现Irrlicht的光照还是比较简单的,相比低于它的OpenGL和Direct3D,设置光源以及设置光照的参数更加人性化(可能是 ...
- NET Core 1.0
VS Code从零开始开发调试.NET Core 1.0 使用VS Code 从零开始开发调试.NET Core 1.0. .NET Core 是一个开源的.跨平台的 .NET 实现. VS Code ...
- 2、Zookeeper集群搭建、命令行Client操作
zookeeper 集群最好是奇数台: 5台允许挂掉2台 4台只能允许挂掉1台 zjtest7-redis:/opt/zookeeper/bin# ./zkServer.sh status ZooKe ...
- MySQL中关于日期、时间的数据类型和函数
一.日期相关的数据类型 1.datetime 占用8字节,既显示了日期,又显示了时间.其表示的日期范围为“1000-01-01 00:00:00”到“9999-12-31 23:59:59” 2.da ...