问题描述
试题编号: 201412-4
试题名称: 最优灌溉
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉。   为了灌溉,雷雷需要建立一些水渠,以连接水井和麦田,雷雷也可以利用部分麦田作为“中转站”,利用水渠连接不同的麦田,这样只要一片麦田能被灌溉,则与其连接的麦田也能被灌溉。   现在雷雷知道哪些麦田之间可以建设水渠和建设每个水渠所需要的费用(注意不是所有麦田之间都可以建立水渠)。请问灌溉所有麦田最少需要多少费用来修建水渠。
输入格式
  输入的第一行包含两个正整数n, m,分别表示麦田的片数和雷雷可以建立的水渠的数量。麦田使用1, 2, 3, ……依次标号。   接下来m行,每行包含三个整数ai, bi, ci,表示第ai片麦田与第bi片麦田之间可以建立一条水渠,所需要的费用为ci
输出格式
  输出一行,包含一个整数,表示灌溉所有麦田所需要的最小费用。
样例输入
4 4 1 2 1 2 3 4 2 4 2 3 4 3
样例输出
6
样例说明
  建立以下三条水渠:麦田1与麦田2、麦田2与麦田4、麦田4与麦田3。
评测用例规模与约定
  前20%的评测用例满足:n≤5。   前40%的评测用例满足:n≤20。   前60%的评测用例满足:n≤100。   所有评测用例都满足:1≤n≤1000,1≤m≤100,000,1≤ci≤10,000。

写法一:

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
struct Edge{
int from,to,dist;
bool operator < (const Edge& ed) const{//ÉýÐòÅÅÁÐ
return dist>ed.dist;
}
};
const int maxn=;
priority_queue<Edge> que;
int pre[maxn];
int n,m,fee;
int find(int v)
{
int u=pre[v];
while(pre[u]!=u)
u=pre[u];
while(pre[v]!=u)
{
int temp=pre[v];
pre[v]=u;
v=temp;
}
return u;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<m;i++)
{
Edge ed;
scanf("%d%d%d",&ed.from,&ed.to,&ed.dist);
que.push(ed);
}
for(int i=;i<=n;i++)
pre[i]=i;
int pc=;
while(!que.empty())
{
Edge e=que.top();
que.pop();
int v1=find(e.from);
int v2=find(e.to);
if(v1!=v2)
{
pre[v1]=v2;
fee+=e.dist;
pc++;
}
if(pc>=n-)
break;
}
printf("%d\n",fee);
return ;
}

写法二:

 //201412-4
//最优灌溉 Kruskal
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<stack>
using namespace std;
struct line{
int a,b,v;
};
line l[];
int f[];
bool cmp(line a,line b){//升序排列
return a.v<b.v;
}
int find(int a){
if(f[a]!=a){
f[a]=find(f[a]);
}
return f[a];
}
int main(){
//freopen("D:\\INPUT.txt","r", stdin);
int n,m;
while(scanf("%d %d",&n,&m)!=EOF){
int i=;
for(;i<m;i++){
scanf("%d %d %d",&l[i].a,&l[i].b,&l[i].v);
}
for(i=;i<=n;i++){
f[i]=i;
}
sort(l,l+m,cmp);
/*for(i=0;i<=m;i++){
cout<<i<<" "<<l[i].v<<endl;
}*/
int sum=;
i=;
n--;
while(n&&i<m){//点的数量可能比线段的数量更多
int a=l[i].a;
int b=l[i].b;
a=find(a);
b=find(b);
if(a!=b){
//cout<<i<<endl;
f[a]=b;
sum+=l[i].v;
n--;
}
i++;
}
cout<<sum<<endl;
}
return ;
}

CCF 201412-4 最优灌溉的更多相关文章

  1. CCF CSP 201412-4 最优灌溉

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201412-4 最优灌溉 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖 ...

  2. CCF系列之最优灌溉(201412-4)

    试题编号:201412-4试题名称:最优灌溉时间限制: 1.0s内存限制: 256.0MB 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来 ...

  3. CCF模拟题 最优灌溉

    最优灌溉 时间限制: 1.0s 内存限制: 256.0MB   问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉. 为了灌溉,雷雷需 ...

  4. CCF CSP 201409-4 最优配餐

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-4 最优配餐 问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务.随着连锁店越来越 ...

  5. CCF真题之最优灌溉

    201412-4 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉. 为了灌溉,雷雷需要建立一些水渠,以连接水井和麦田,雷雷也可以利 ...

  6. 【CCF】最优灌溉 最小生成树

    [AC] #include<iostream> #include<cstdio> #include<string> #include<cstring> ...

  7. 最优灌溉_最小生成树Kruskal

    问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉. 为了灌溉,雷雷需要建立一些水渠,以连接水井和麦田,雷雷也可以利用部分麦田作为“中 ...

  8. CCF模拟题 最优配餐

    最优配餐 时间限制: 1.0s 内存限制: 256.0MB   问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务.随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题. 栋栋的连锁店所在 ...

  9. CCF-CSP题解 201412-4 最优灌溉

    \(kruskal\),有兴趣\(heap\_prim\).\(stl\ pq\)实现复杂度相同. #include <bits/stdc++.h> using namespace std ...

随机推荐

  1. 【C#】事件

    前言:CLR事件模式建立在委托的基础上,委托说调用回调方法的一种类型安全的方式. 我个人觉得事件本质就是委托,所以把委托弄清楚,只要知道事件基本语法就会使用了(如果说到线程安全,我个人觉得这个应该和线 ...

  2. sql 计算地球2个坐标之间的距离

    show variables like '%func%'; set global log_bin_trust_function_creators=1; use scm_wuliudelimiter $ ...

  3. table数据跑马灯效果

    1.使用marquee标签实现普通文本字符串跑马灯效果. <marquee behavior="scroll" scrollamount="3" styl ...

  4. javascript实现俄罗斯方块游戏

    观摩一下<编程之美>:“程序虽然很难写,却很美妙.要想把程序写好,需要写好一定的基础知识,包括编程语言.数据结构与算法.程序写得好,需要缜密的逻辑思维能力和良好的梳理基础,而且熟悉编程环境 ...

  5. 如何防止Unity3D代码被反编译?

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 网易云易盾移动游戏安全技术专家陈士留在2018年Unity技术路演演讲内容中对这个问题有过比较详细的介绍,摘录如下: 防止Unity3D代码被反编译 ...

  6. Android 虚拟机访问本地服务器的地址

    http://10.0.2.2:8080/test/ 比如 localhost:8080 为 tomcat 地址,然后 test 是 tomcat 目录下 webapps 的子目录. 10.0.2.2 ...

  7. acedSSGet使用自定义提示字符:$模式

          ads_name ss; struct resbuf *pRbList=NULL; pRbList=acutBuildList(RTDXF0,_T("lwpolyline,ins ...

  8. [ActionScript 3.0] 简单倒计时

    import flash.utils.Timer; import flash.events.TimerEvent; import flash.text.TextField; var text:Text ...

  9. Mybatis映射.xml文件报错

    MyBatis框架里面,在dao层进行测试,控制台显示错误是:必须为元素类型 "delete" 声明属性 "resultType" 相应的.xml文件的sql语 ...

  10. 使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

    使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的.例如,对于如下语句:final StringBuffer a=new StringBuffer( ...