题目链接:

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 忽悠大神【最小生成树】的更多相关文章

  1. 【web前端面试题整理04】阿里一行之大神面对面

    前言 这段时间我在河南一家公司当了一段时间的前端主管,最后可耻的匿了,原因各种各样,最主要的就是不想呆在郑州了. 其实这里的同事还是很不错的,面对老总最后的挽留我不是没有动心,而是这个地方确实不太好, ...

  2. java大神进阶之路

    既然励志在java路上走的更远,那就必须了解java的路径.先看图 更加细化的细节如下 一: 编程基础 不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的数据结构和算法基础还 ...

  3. 自己封装了一个EF的上下文类.,分享一下,顺便求大神指点

    using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...

  4. 前端自学vs跟大神系统学?你看着办

    前端自学vs跟大神系统学?你看着办 一名广告专业学生,在大三的时候对于广告行业的前景不是很看好,转而自学web前端,刚开始接触的前端语言是html(html应该不算编程语言),上手很容易,在w3csh ...

  5. 学习大神笔记之“MyBatis学习总结(二)”

    MyBatis对表的增删改查操作         主要有两种方式:基于XML实现和基于注解实现. 完整项目结构: 工具类:MyBatisUtil-------用于获取  sqlsession pack ...

  6. JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力。。

      JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力..   小森执行一 ...

  7. 解迷宫的C++的未完善编程代码........请大神们帮忙改善下.........

    这...................................................................... 我也是醉了 看不太懂,大神们求解............ ...

  8. [OC笔记]@property之个人理解,大神轻拍

    /** * 一个简单的对象 * * @author suzhen * */ public class SimpleObjcet { /** * 声明一个age字段 */ private Object ...

  9. 【leetcode】Wildcard Matching(hard) ★ 大神太牛了

    Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...

随机推荐

  1. About App Sandbox

    沙盒是在受限的安全环境中运行应用程序的一种做法,这种做法是要限制授予应用程序的代码访问权限. 沙盒技术提供对资源的严格控制,沙盒通过限制对内存.系统文件和设置的访问,沙盒可以让企业可通过执行潜在恶意代 ...

  2. 图形学基础 | 实现OBJ文件的载入

    1. tiny_obj_loader.h 的使用include这个头文件需要先定义一个宏 #define TINYOBJLOADER_IMPLEMENTATION#include "tiny ...

  3. 数据库sql语句limit区别

    注意:并非所有的数据库系统都支持 SELECT TOP 语句. MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取. SQL Server / MS ...

  4. MySQL-06 数据备份和恢复

    学习目标 数据备份 数据恢复 数据库迁移 导入和导出 数据备份 系统意外崩溃或者服务器硬件损坏都有可能导致数据库丢失,因此生产环境中数据备份非常重要. MySQLdump命令备份 该命令可以将数据库备 ...

  5. Spring-1-IOC

    IOC与DI的区别? IOC:控制反转(Inversion of Control是面向对象的一种设计原则,可以用来降低计算机之间的耦合度,其中最常见的是依赖注入).是实现的目标 DI:是实现IOC的一 ...

  6. django 127.0.0.1 将您重定向的次数过多

    "GET /?next=/%3Fnext%3D/%253Fnext%253D/ HTTP/1.1" 302 0 solution reference from django.con ...

  7. python数组中数据位置交换 -- IndexError: list assignment index out of range

    代码: t = [-10,-3,-100,-1000,-239,1] # 交换 -10和1的位置 t[5], t[t[5]-1] = t[t[5]-1], t[5] 报错: IndexError: l ...

  8. 02numpy

    一. Numpy定义 一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型.多维数组上执行数值运算 二. Numpy使用 1.创建数组 2.nu ...

  9. docker快速搭建

    curl  -sSL https://get.docker.com|sh docker --version systemctl start docker.service ps -ef|grep doc ...

  10. virsh 命令

    virsh是用与管理虚拟化环境中的客户机和Hypervisor的命令行工具,与virt-manager等工具类似,也是调用libvirt API来实现虚拟化的管理. 在使用virsh命令行进行虚拟化管 ...