SOJ 4482 忽悠大神【最小生成树】
题目链接:
http://acm.scu.edu.cn/soj/problem.action?id=4482
题意:
给定边权和点权,从一个点出发并回到该点,减少尽量多的边,每路过点和边都要把权重加到花费上,问最小花费是多少?
分析:
容易想到最后得到的肯定是棵树。
每条边肯定走两遍,然后我们在走边的时候它的两个点肯定也要走一遍,把每条边的权值更新为2倍的边权+点权。
出发点要走两遍,所以选择点权最少点作为出发点, 最后最小生成树一发即可。
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
struct edge{int u, v, w;};
const int maxn = 10050, maxm = 100005;
edge e[maxm];
int n, m ,p;
int pa[maxn], _rank[maxn];
int a[maxn];
int _find(int a)
{
if(a == pa[a]) return a;
else return pa[a] = _find(pa[a]);
}
void unite(int a, int b)
{
int ra = _find(a), rb = _find(b);
if(_rank[ra] < _rank[b]) pa[ra] = rb;
else{
pa[rb] = ra;
if(_rank[ra] == _rank[rb]) _rank[ra]++;
}
return;
}
int same(int a, int b)
{
return _find(a) == _find(b);
}
int kruskal(int r)
{
sort(e, e+r, cmp);
for(int i = 1; i <= n; i++){
pa[i] = i;
}
int res = 0;
for(int i = 0; i < r; i++){
if(!same(e[i].u,e[i].v)){
unite(e[i].u, e[i].v);
res += e[i].w;
}
}
return res;
}
int main(void)
{
while(~scanf("%d%d", &n, &p)){
fill(_rank, _rank + n, 1);
int Min = 1<<31 - 1;
for(int i = 1;i <= n; i++){
scanf("%d", &a[i]);
Min = min(a[i], Min);
}
int x, y, r;
for(int i = 0; i < p;i++){
scanf("%d%d%d",&x, &y, &r);
e[i] = (edge){x, y, r*2+a[x]+a[y]};
}
printf("%d\n", Min + kruskal(p));
}
return 0;
}
SOJ 4482 忽悠大神【最小生成树】的更多相关文章
- 【web前端面试题整理04】阿里一行之大神面对面
前言 这段时间我在河南一家公司当了一段时间的前端主管,最后可耻的匿了,原因各种各样,最主要的就是不想呆在郑州了. 其实这里的同事还是很不错的,面对老总最后的挽留我不是没有动心,而是这个地方确实不太好, ...
- java大神进阶之路
既然励志在java路上走的更远,那就必须了解java的路径.先看图 更加细化的细节如下 一: 编程基础 不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的数据结构和算法基础还 ...
- 自己封装了一个EF的上下文类.,分享一下,顺便求大神指点
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...
- 前端自学vs跟大神系统学?你看着办
前端自学vs跟大神系统学?你看着办 一名广告专业学生,在大三的时候对于广告行业的前景不是很看好,转而自学web前端,刚开始接触的前端语言是html(html应该不算编程语言),上手很容易,在w3csh ...
- 学习大神笔记之“MyBatis学习总结(二)”
MyBatis对表的增删改查操作 主要有两种方式:基于XML实现和基于注解实现. 完整项目结构: 工具类:MyBatisUtil-------用于获取 sqlsession pack ...
- JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力。。
JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力.. 小森执行一 ...
- 解迷宫的C++的未完善编程代码........请大神们帮忙改善下.........
这...................................................................... 我也是醉了 看不太懂,大神们求解............ ...
- [OC笔记]@property之个人理解,大神轻拍
/** * 一个简单的对象 * * @author suzhen * */ public class SimpleObjcet { /** * 声明一个age字段 */ private Object ...
- 【leetcode】Wildcard Matching(hard) ★ 大神太牛了
Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...
随机推荐
- NIO入门之轻松读取大文件
NIO入门之轻松读取大文件 今天同事碰到了一个问题,从游戏服务器下载下来的输出log有一个多G大.用记事本打不开,EditPlus也打不开,都提示文件太大.用word也打不开,提示文件大于512M.打 ...
- Windows各个文件夹介绍
windows文件介绍 总结 ├WINDOWS │ ├-system32(存放Windows的系统文件和硬件驱动程序) │ │ ├-config(用户配置信息和密码信息) │ │ │ └-system ...
- IOS中经典的缓存对比
http://bpoplauschi.wordpress.com/2014/03/21/ios-image-caching-sdwebimage-vs-fastimage/
- 对faster rcnn代码讲解的很好的一个
http://www.cnblogs.com/houkai/p/6824455.html http://blog.csdn.net/u014696921/article/details/6032142 ...
- 《3+1团队》【Alpha】Scrum meeting 1
项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 3+1团队 团队博客地址 https://home.cnblogs.com/u/3-1group ...
- ES6 第三章 变量的解构赋值 具体参照http://es6.ruanyifeng.com
1.基本用法 let [a, b, c] = [1, 2, 3];左右两边解构格式要保持一致. 2.默认值 let [x, y = 'b'] = ['a']; // x='a', y='b' let ...
- 如何给run()方法传参数
实现的方式主要有三种 1.构造函数传参 2.成员变量传参 3.回调函数传参 问题:如何实现处理线程的返回值? 1.主线程等待法(优点:实现起来简单,缺点:需要等待的变量一多的话,代码就变的非常臃肿.而 ...
- TWaver可视化编辑器的前世今生(一)电信网管编辑器
走到今天,TWaver,一个致力于在技术领域(Technology)的弄潮儿(Waver),已经是第十二个年头.当年网吧的小网管都是IDC机房的运维人员了,TWaver也见证了这个时代的成长变迁. 萌 ...
- 448. Find All Numbers Disappeared in an Array@python
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...
- 洛谷 P2858 奶牛零食
https://www.luogu.org/problemnew/show/P2858 毫无疑问区间dp. ![区间dp入门] 我们定义dp[i][j]表示从i到j的最大收益,显然我们需要利用比较小的 ...