题目链接

算法: 最小生成树

PS:被卡过2天(中间的时间没去做)。日期:2013-09-13 13:49:47 ~ 2013-09-17 13:01:07

此题为基础题

刚开始学图论时只会用Kruskal+并查集,以为Kruskal和Prim差不多= =于是就用Kruskal来做这题,结果是不用说的

然后就学习了Prim,并在我之前的博文有介绍 最小生成树

题目描述:

一个国家有n个城市。若干个城市之间有电话线连接,现在要增加m条电话线(电话线当然是双向的了),使得任意两个城市之间都直接或间接经过其他城市有电话线连接,你的程序应该能够找出最小费用及其一种连接方案。

需要注意的是,输入中可能已经包含了电话线,所以要判断此电话线是否存在(输入中0表示有,故判断是否为true即可),存在就不予考虑。不会影响到算法。

CODE:

//最小生成树 Prim算法
//我没用到优先队列,是直接用暴力找出的= =
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 105;
const int INF = 2147483647;
int i, j, n;
long long ans = 0;
int edge[MAXN][MAXN], key[MAXN], p[MAXN], vis[MAXN] = {0}, //edge表示存的边 key表示权值,p表示父亲,vis表示是否已经存在已生成的树中
f[MAXN], l[MAXN], m = 0; //f表示头,右边表示尾
int main()
{
cin >> n;
for(i = 1; i <= n; i++)for(j = 1; j <= n; j++) cin >> edge[i][j];
for(i = 1; i <= n; i++) key[i] = INF;
key[1] = 0; //
p[1] = 1;
int Mini, Min;
for(i = 0; i < n; i++) //之需要加最多n条边,故循环n次
{
Min = INF;
for(j = 1; j <= n; j++) if(!vis[j] && key[j] < Min){Mini = j; Min = key[j];} //找key值最小的点,即与树相邻的节点的最小权值边
vis[Mini] = 1; //设置访问过,即生成树已连接Mini这个节点
ans += key[Mini];
if(key[Mini])
{
f[m] = min(p[Mini], Mini); //字典序的边
l[m++] = max(p[Mini], Mini); //同上
}
for(j = 1; j <= n; j++) //伪松弛,更新树临边节点的key值并维护p域
if(!vis[j] && edge[Mini][j] < key[j])
{key[j] = edge[Mini][j]; p[j] = Mini;}
}
cout << m << endl;
for(i = 0; i < m; i++) cout << f[i] << ' ' << l[i] << endl;
cout << ans;
return 0;
}

【wikioi】1003 电话连线的更多相关文章

  1. Codevs 1003 电话连线

    时间限制: 1 s   空间限制: 128000 K   题目等级 : 黄金 Gold 题目描述 Description 一个国家有n个城市.若干个城市之间有电话线连接,现在要增加m条电话线(电话线当 ...

  2. codevs——1003——电话连线

    题目描述 Description 一个国家有n个城市.若干个城市之间有电话线连接,现在要增加m条电话线(电话线当然是双向的了),使得任意两个城市之间都直接或间接经过其他城市有电话线连接,你的程序应该能 ...

  3. 1、Codevs 必做:2833、1002、1003、2627、2599

    2833 奇怪的梦境  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Aiden陷入了一个奇怪的梦境:他被困 ...

  4. 电话连线(codevs 1003)

    题目描述 Description 一个国家有n个城市.若干个城市之间有电话线连接,现在要增加m条电话线(电话线当然是双向的了),使得任意两个城市之间都直接或间接经过其他城市有电话线连接,你的程序应该能 ...

  5. Bestcoder#5 1003

    Bestcoder#5 1003 Poor RukawTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  6. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  7. dp 动态规划 hdu 1003 1087

    动态规划就是寻找最优解的过程 最重要的是找到关系式 hdu 1003 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目大意:求最大字序列和, ...

  8. PKU 1003解题

    首先庆祝一下,今天连A了3题.感觉后面这题太简单了.. 由于英文不好 ,找了个翻译: 若将一叠卡片放在一张桌子的边缘,你能放多远?如果你有一张卡片,你最远能达到卡片长度的一半.(我们假定卡片都正放在桌 ...

  9. POJ做题笔记:1000,1004,1003

    1000 A+B Problem 题目大意:输入两个数a和b,输出他们的和. 代码: #include <stdio.h> int main() { int a, b; while (sc ...

随机推荐

  1. Extjs ComboBox 动态选中第一项

    有时候我们希望通过Store加载过来的数据,ComboBoxItem能够选择第一条数据作为默认数据,我们可以这么操作: var storeinfo = Ext.create('Ext.data.Sto ...

  2. 算法系列:XXX

    转载自http://www.cnblogs.com/skynet/p/3372855.html 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择 ...

  3. html5拖拽

    html5拖拽一 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...

  4. linux下搭建属于自己的博客(WordPress安装)

    转自:http://www.cnblogs.com/xiaofengkang/archive/2011/11/16/2251608.html WordPress简介 WordPress 是一种使用 P ...

  5. office excel 装Visual Studio后报错解决方案

    安装完vs后,vs会向office安装COM加载项,但是在启动Excel时会发生弹出此加载项安装出错的消息,如下图. 名称: 从: file:///D:/Program Files (x86)/Mic ...

  6. 转一篇dudu大人的文章:程序员,用NuGet管理好你的包包

    每个女人都有很多包包:其实男人也有,但只有会写程序的男人才有 —— 代码世界中的大“包”小“包”.这些大包小包,有花钱买的,有从开源市场淘的,也有自己或同事亲手制作的. 包包有个特点:容易坏,更新快, ...

  7. 以管理身份运行cmd

    搜索出cmd程序,然后右键-以管理员身份运行

  8. 标准MDL方法修改Page、NonPage内存的属性

    typedef struct _REPROTECT_CONTEXT { PMDL   Mdl; PUCHAR LockedVa; } REPROTECT_CONTEXT, * PREPROTECT_C ...

  9. 原生JavaScript 全特效微博发布面板效果实现

    javaScript实现微博发布面板效果.---转载白超华 采用的js知识有: 正则表达式区分中英文字节.随机数生成等函数 淡入淡出.缓冲运动.闪动等动画函数 onfocus.onblur.oninp ...

  10. pig的各种运行模式与运行方式详解

    一.pig的运行模式: Pig 有两种运行模式: Local 模式和 MapReduce 模式.当 Pig 在 Local 模式运行的时候, Pig 将只访问本地一台主机:当 Pig 在 MapRed ...