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 ...
随机推荐
- C++中,如何定义和使用指向成员函数的指针
/*** 定义指向成员函数的指针变量的形式 : 成员函数返回类型 (类名∷*指针变量名)(参数列表)* 成员函数指针变量值的形式 : &类名∷成员函数名;* 成员函数指针变量使用形式 : (对 ...
- 史上最详细的Android Studio系列教程一--下载和安装
链接地址:http://segmentfault.com/a/1190000002401964#articleHeader4 原文链接:http://stormzhang.com/devtools/2 ...
- [Swust OJ 603]--吃饺子大王
题目链接:http://acm.swust.edu.cn/problem/603/ Time limit(ms): 1000 Memory limit(kb): 65535 同学们还记得我们班 ...
- java 对象赋值问题
import java.io.*; class CCircle{ private static double pi = 3.1415; private double radius; public CC ...
- LGPL与闭源程序
最近一直在学习 Qt.Qt 有两个许可证:LGPL 和商业协议.这两个协议在现在的 Qt 版本中的代码是完全一致的(潜在含义是,Qt 的早期版本,商业版的 Qt 通常包含有一些开源版本所没有的库,比如 ...
- jQuery带有定时器的tab栏切换
现在网上很多类似选项卡的切换,我们成为tab栏切换,比如下图: 新浪的tab栏切换 淘宝的tab栏切换 其中,新浪的tab栏鼠标放上去,可以快速的来回切换,但是如果采取ajax异步传输,不停去加载服务 ...
- JavaScript:获取系统当前时间,构造格式化的字符串
var getNowFormatDate = function() { var date = new Date(); var seperator1 = "-"; ...
- Observer设计模式【利用商品概念解释】
每个人都想过着富有的生活,这是很正常的. 这里以开店进货为例. 在讲之前解释英语单词: Observer:查看:遵守 Observable:可见的,公开的. 从单词可以知道:商品用来卖,所以公开,继承 ...
- DSP连接不上CCS3.3的问题讨论
环境 操作系统:Win7, 64bit IDE:CCS V3.3 仿真器:SEED XDS510PLUS DSP型号:TMS320C6713GDP(DSP6713) 检查步骤 试着按下复位按键后再点击 ...
- [产值分析]生产部KPI考核之产值分析
接到新任务:设计统计电子和磁电公司生产部产值分析报表. 眼下状况: 1.电子公司:取最新单位价格*入库数量 2.磁电公司:取最低价格*入库数量(实际取价的时候又没有取到最低价) 假设计算出来的结果和財 ...