题目描述 Description

学校需要将n台计算机连接起来,不同的2台计算机之间的连接费用可能是不同的。为了节省费用,我们考虑采用间接数据传输结束,就是一台计算机可以间接地通过其他计算机实现和另外一台计算机连接。

为了使得任意两台计算机之间都是连通的(不管是直接还是间接的),需要在若干台计算机之间用网线直接连接,现在想使得总的连接费用最省,让你编程计算这个最小的费用。

输入描述 Input Description

输入第一行为两个整数n,m(2<=n<=100000,2<=m<=100000),表示计算机总数,和可以互相建立连接的连接个数。接下来m行,每行三个整数a,b,c 表示在机器a和机器b之间建立连接的话费是c。(题目保证一定存在可行的连通方案, 数据中可能存在权值不一样的重边,但是保证没有自环)

输出描述 Output Description

输出只有一行一个整数,表示最省的总连接费用。

样例输入 Sample Input

3 3

1 2 1

1 3 2

2 3 1

样例输出 Sample Output

2

数据范围及提示 Data Size & Hint

最终答案需要用long long类型来保存

分类标签 Tags 点此展开

 超时代码:
超时的原因是:
find函数,可以自己进行对比!数据特别明显
必须要进行

(把find(f[x]改为f[x]=find(f[x])))
这样一个处理!
不然数据越大,越难弄,需要从低向上找很久很久

运行结果

测试点#1.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#2.in 结果:AC 内存使用量: 492kB 时间使用量: 15ms
测试点#3.in 结果:AC 内存使用量: 620kB 时间使用量: 26ms
测试点#4.in 结果:TLE 内存使用量: 3176kB 时间使用量: 1000ms
测试点#5.in 结果:TLE 内存使用量: 2924kB 时间使用量: 1000ms     

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#define Maxn 100010 using namespace std; long long n,m,tot=,f1,f2,k;
long long f[Maxn];
bool u[Maxn]; struct gx{
long long x;
long long y;
long long w;
bool operator < (const gx &qwq)const
{
return w<qwq.w;
}
}gx[Maxn]; int find(int x)
{
//if(f[x]!=x) f[x]=find(f[x]);
//return f[x];
return x == f[x] ? x : find(f[x]);
} int main()
{
//ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=;i<=m;i++)
{
cin>>gx[i].x>>gx[i].y>>gx[i].w;
}
for(int i=;i<=n;i++) f[i]=i;
sort(gx+,gx++m);
for(int i=;i<=m;i++)
{
f1=find(gx[i].x);
f2=find(gx[i].y);
if(f1!=f2)
{
f[f2]=f1;
++k;
tot+=gx[i].w;
}
if(k==n-) break;
}
cout<<tot<<endl;
return ;
}

AC的两个代码:

1)原因仅仅是因为把find函数改了

数据如下:

运行结果

测试点#1.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#2.in 结果:AC 内存使用量: 488kB 时间使用量: 12ms
测试点#3.in 结果:AC 内存使用量: 744kB 时间使用量: 25ms
测试点#4.in 结果:AC 内存使用量: 3052kB 时间使用量: 147ms
测试点#5.in 结果:AC 内存使用量: 2920kB 时间使用量: 142ms     

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#define Maxn 100010 using namespace std; long long n,m,tot=,f1,f2,k;
long long f[Maxn];
bool u[Maxn]; struct gx{
long long x;
long long y;
long long w;
bool operator < (const gx &qwq)const
{
return w<qwq.w;
}
}gx[Maxn]; int find(int x)
{
if(f[x]!=x) f[x]=find(f[x]);
return f[x];
//return x == f[x] ? x : find(f[x]);
} int main()
{
//ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=;i<=m;i++)
{
cin>>gx[i].x>>gx[i].y>>gx[i].w;
}
for(int i=;i<=n;i++) f[i]=i;
sort(gx+,gx++m);
for(int i=;i<=m;i++)
{
f1=find(gx[i].x);
f2=find(gx[i].y);
if(f1!=f2)
{
f[f2]=f1;
++k;
tot+=gx[i].w;
}
if(k==n-) break;
}
cout<<tot<<endl;
return ;
}

2)优化版(把cin,cout优化)

代码:

数据:

运行结果

测试点#1.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#2.in 结果:AC 内存使用量: 492kB 时间使用量: 4ms
测试点#3.in 结果:AC 内存使用量: 616kB 时间使用量: 10ms
测试点#4.in 结果:AC 内存使用量: 3180kB 时间使用量: 60ms
测试点#5.in 结果:AC 内存使用量: 3048kB 时间使用量: 54ms

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#define Maxn 100010 using namespace std; long long n,m,tot=,f1,f2,k;
long long f[Maxn];
bool u[Maxn]; struct gx{
long long x;
long long y;
long long w;
bool operator < (const gx &qwq)const
{
return w<qwq.w;
}
}gx[Maxn]; int find(int x)
{
if(f[x]!=x) f[x]=find(f[x]);
return f[x];
//return x == f[x] ? x : find(f[x]);
} int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=;i<=m;i++)
{
cin>>gx[i].x>>gx[i].y>>gx[i].w;
}
for(int i=;i<=n;i++) f[i]=i;
sort(gx+,gx++m);
for(int i=;i<=m;i++)
{
f1=find(gx[i].x);
f2=find(gx[i].y);
if(f1!=f2)
{
f[f2]=f1;
++k;
tot+=gx[i].w;
}
if(k==n-) break;
}
cout<<tot<<endl;
return ;
}

codevs 1231 最优布线问题 x(find函数要从娃娃抓起系列)的更多相关文章

  1. Codevs 1231 最优布线问题

    题目描述 Description 学校需要将n台计算机连接起来,不同的2台计算机之间的连接费用可能是不同的.为了节省费用,我们考虑采用间接数据传输结束,就是一台计算机可以间接地通过其他计算机实现和另外 ...

  2. (最小生成树) codeVs 1231 最优布线问题

    题目描述 Description 学校需要将n台计算机连接起来,不同的2台计算机之间的连接费用可能是不同的.为了节省费用,我们考虑采用间接数据传输结束,就是一台计算机可以间接地通过其他计算机实现和另外 ...

  3. codevs1231 最优布线问题

    1231 最优布线问题 题目描述 Description 学校需要将n台计算机连接起来,不同的2台计算机之间的连接费用可能是不同的.为了节省费用,我们考虑采用间接数据传输结束,就是一台计算机可以间接地 ...

  4. 最优布线问题(wire.cpp)

    最优布线问题(wire.cpp) [问题描述] 学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来.两台计算机被连接是指它们间有数据线连接.由于计算机所处的位置不同,因此不同的两台计算机的 ...

  5. 27.prim算法  最优布线问题(wire.cpp)

    [例4-10].最优布线问题(wire.cpp) [问题描述] 学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来.两台计算机被连接是指它们间有数据线连接.由于计算机所处的位置不同,因此不 ...

  6. [图论]最优布线问题:kruskal

    最优布线问题 目录 最优布线问题 Description Input Output Sample Input Sample Output Hint 解析 代码 Description 学校有n台计算机 ...

  7. [图论]最优布线问题:prim

    最优布线问题 目录 最优布线问题 Description Input Output Sample Input Sample Output Hint 解析 代码 Description 学校有n台计算机 ...

  8. [wikioi]最优布线问题

    http://wikioi.com/problem/1231/ Kruskal+并查集.comp函数里面如果用const引用的话,可以减少copy.并查集find的时候是递归找父亲的根.无他. #in ...

  9. T1231 最优布线 codevs

    http://codevs.cn/problem/1231/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题目描述 Description 学校需要将n ...

随机推荐

  1. Tomcat解析XML和反射创建对象原理

    Tomcat解析XML和反射创建对象原理 import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Me ...

  2. MySQL数据库基础-JAVA

    数据库 MySQL初步 MySQL基础认知 (Oracle真的是走哪祸害到哪23333) Java多用MySQL和Oracle SQLServer也收费,但是还行,比Oracle便宜,一个差不多3w多 ...

  3. scrapyd使用教程

    1. 安装服务器: pip install scrapyd 启动: scrapyd 访问:127.0.0.1:6800 2. 安装客户端 pip install scrapyd-client 3. 进 ...

  4. vue项目打包后在IE浏览器报错,页面显示空白

    之前写一个项目,一直放在谷歌浏览器调试测试,到尾声时放到IE浏览器结果直接白屏,页面打不开 找了网上的方法,加了babel-polyfill插件后还是不行,后来排查发现是打包插件出了问题,因为用的项目 ...

  5. charles 安装使用教程及弱网设置

    1.安装jdk环境 2.下载charles 3.打开直接使用 4.手机端安装相关证书 5.手机端网络设置代理 6.分析查看数据 点击sequane中的值查看app中的数据返回与请求值.   charl ...

  6. MyCat配置简述以及mycat全局ID

    Mycat可以直接下载解压,简单配置后可以使用,主要配置项如下: 1. log4j2.xml:配置MyCat日志,包括位置,格式,单个文件大小 2. rule.xml: 配置分片规则 3. schem ...

  7. centos7.2升级openssh7.9p1

    Centos7.2版本yum升级openssh版本最高到7.4,想要升级到更高的版本需要重新编译 一.查看当前openssh版本: [root@localhost ~]# ssh -VOpenSSH_ ...

  8. kubesphere集群节点扩容

    原有的节点是 : master[123] , node[1234] 新加的节点node5 一.修改配置文件hosts.ini [root@master0 ~]# /conf/hosts.ini [al ...

  9. 安装vim自动补全插件

    1 安装VIM 2 安装vim插件管理工具.过程见链接.(谢谢) 3 在.vimrc中添加下列代码 Bundle 'Valloric/YouCompleteMe' 保存退出后打开vim,在正常模式下输 ...

  10. iptables 设置指定IP客户端访问服务器redis端口

    一.需求描述 服务器172.28.18.75开放了6379redis端口,由于没有设置登录密码,所以需要防火墙设置只能指定的IP地址172.28.5.125客户端访问redis端口 二.查看172.2 ...