题目链接:

https://cn.vjudge.net/problem/SGU-462

题目大意:

有N条电线需要接入电网,第i条电线计划连接ai和bi两个地点,电线有两个属性:ri(电线稳定度)和ci(电线价值)。电线需要依次接入,如果形成了环,那么环上稳定度最低的电线就会被烧毁。你需要确定一个接入电线的顺序,使得电线总价值最大。

解题思路:

由于形成环,环上的最低稳定度的电线会被烧毁,所以最终的结果一定没有环,也就是一棵以r为关键字的最大生成树(因为最小的r在环上会被烧断,完好无损的就是最大的r),要使得价值最大,那么相同的r就按照价值大的排在前面,排好序求出最大生成树那就是最大价值。

至于连接顺序,只要保持r从小到大或者r从大到小都是可以的。

注意:由于需要将每条边的两个节点进行编号,所以用并查集的时候初始化范围从0到2*n而不是n。因为每条边有两个点。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + ;
int n, m;
struct node//存储操作
{
int u, v, id;
ll c, r;
}a[maxn];
bool cmp1(const node& a, const node& b)
{
if(a.r == b.r)return a.c > b.c;
return a.r > b.r;//最大生成树
}
bool cmp2(const node& a, const node& b)
{
if(a.r == b.r)return a.c < b.c;
return a.r < b.r;
}
int fa[maxn];
int Find(int x)
{
return x == fa[x] ? x : fa[x] = Find(fa[x]);
}
map<int, int>ID;
int cnt;
int getID(int x)
{
if(ID[x])return ID[x];
return ID[x] = ++cnt;
}
int main()
{
while(scanf("%d", &n) != EOF)
{
ID.clear();
cnt = ;//计数
for(int i = ; i <= n; i++)
{
scanf("%d%d%lld%lld", &a[i].u, &a[i].v, &a[i].r, &a[i].c);
a[i].u = getID(a[i].u);
a[i].v = getID(a[i].v);
a[i].id = i;
}
for(int i = ; i <= cnt; i++)
fa[i] = i;
sort(a + , a + + n, cmp1);
ll ans = ;
for(int i = ; i <= n; i++)
{
if(Find(a[i].u) != Find(a[i].v))
{
ans += a[i].c;
fa[Find(a[i].u)] = Find(a[i].v);
}
}
sort(a + , a + + n, cmp2);
printf("%lld\n%d", ans, a[].id);
for(int i = ; i <= n; i++)
printf(" %d", a[i].id);
puts("");
}
return ;
}

SGU---462 Electrician 最大生成树的更多相关文章

  1. 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用

    图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...

  2. NOIP 2013 货车运输 最大生成树加DFS巧妙AC

    #include<set> #include<map> #include<cmath> #include<queue> #include<stac ...

  3. luogu p2330[SCOI05] 繁忙的都市——瓶颈生成树

    P2330 05四川 繁忙的都市 题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道 ...

  4. jstree动态生成树

    前篇文章简单介绍了静态生成树,这篇文章将通过后台把数据通过json形式传到前台,进行动态生成树. 本篇的程序所用框架为Spring MVC,可以很方便的通过controller层传json到前台. 前 ...

  5. jstree静态生成树并为树添加触发事件

    本章将介绍如何简单的使用jstree生成树(生成树的数据是静态的),并为树添加点击事件. 1. 建一个jsp页面,引入jquery.js(在其他js前引用),引入jstree所需的js,css文件(可 ...

  6. 【BZOJ1002】【FJOI2007】轮状病毒(生成树计数)

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1766  Solved: 946[Submit][Status ...

  7. 【HDU 4305】Lightning(生成树计数)

    Problem Description There are N robots standing on the ground (Don't know why. Don't know how). Sudd ...

  8. PHP无限极分类生成树方法,无限分级

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...

  9. SGU 495. Kids and Prizes

    水概率....SGU里难得的水题.... 495. Kids and Prizes Time limit per test: 0.5 second(s)Memory limit: 262144 kil ...

随机推荐

  1. [转]C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解

    本文转自:http://www.cnblogs.com/landeanfen/p/5501487.html 阅读目录 一.void无返回值 二.IHttpActionResult 1.Json(T c ...

  2. 二、多线程之Atomic包

    一.简介 1.原子操作 我们在使用变量的时候,经常会出现资源竞争的情况,为了保证变量安全,我们就会对对应的方法添加"synchronized"同步锁来达到目的,以保证线程安全. 而 ...

  3. SpringFramework中重定向

    需求: 需要在两个@Controller之间跳转,实现重定向 解决: @PostMapping("/files/{path1}") public String upload(... ...

  4. 撩课-Java每天5道面试题第12天

    91.如何提升数据查询的效率? 1.首先检查表的结构是否合理, 因为采用多表查询的时候, 看主外键的引用关系是否适当. 如果不适当则重新设置表结构. 如果是应用中的系统, 则不需要更改表的字段, 只更 ...

  5. 撩课-Java每天5道面试题第8天

    撩课Java+系统架构 视频 点击开始学习 71.jsp有哪些内置对象?作用分别是什么? Page, pageContext, request, response, session, applicat ...

  6. mongo_connector.oplog_manager:670 - Exception during collection dump

    今天再整合mongodb和elasticsearch时,执行最后一步命令 “mongo-connector -m -m localhost:8090 -t  -t -t localhost:9200 ...

  7. 说说JSON和JSONP区别

    前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socke ...

  8. 您只能在 HTML 输出流中使用 document.write,啥意思

    JavaScript :写入到HTML输出语法 注意:只能在HTML输出中使用,如果在文档已经加载后使用(比如在函数中)  会覆盖到整个文档 <!DOCTYPE html> <htm ...

  9. input一些验证

    这篇博文大部分来自于网上,为了方便自己查阅,以及帮助他人. 1.正则验证只能输入正整数:  onkeyup = " if (this.value.length==1) { this.valu ...

  10. JavaScript-原型&原型链&原型继承&组合函数

    小小的芝麻之旅: 今天学习了js的原型,要说原型,我们先简单说一下函数创建过程. 原型 每个函数在创建的时候js都自动添加了prototype属性,这就是函数的原型,原型就是函数的一个属性,类似一个指 ...