由题意知,最后要保留的边肯定都要被走过

来回一条边所花费的时间=2*边长+安慰边两端的牛所要花的时间和

总时间就等于所保留边来回的时间和+根节点时间;

不难想到做一下最小生成树即可

贪心可知,根一定选在需要安慰时间最小的那个点

 type node=record
       x,y,len:longint;
     end;
var a:array[..] of node;
    fa,w:array[..] of longint;
    n,m,ans,i,j,k1,k2:longint; function getf(x:longint):longint;
  begin
    if x<>fa[x] then fa[x]:=getf(fa[x]);
    exit(fa[x]);
  end; procedure swap(var a,b:node);
  var c:node;
  begin
    c:=a;
    a:=b;
    b:=c;
  end; procedure sort(l,r:longint);
  var i,j,p,q: longint;
  begin
    i:=l;
    j:=r;
    p:=a[(l+r) shr ].len;
    repeat
      while (a[i].len<p) do inc(i);
      while (p<a[j].len) do dec(j);
      if not(i>j) then
      begin
        swap(a[i],a[j]);
        inc(i);
        j:=j-;
      end;
    until i>j;
    if l<j then sort(l,j);
    if i<r then sort(i,r);
  end; begin
  readln(n,m);
  ans:=;
  for i:= to n do
  begin
    readln(w[i]);
    if w[i]<ans then ans:=w[i];
    fa[i]:=i;
  end;
  for i:= to m do
  begin
    readln(a[i].x,a[i].y,a[i].len);
    a[i].len:=a[i].len*+w[a[i].x]+w[a[i].y];
  end;
  sort(,m);
  i:=;
  j:=;
  while i<n- do
  begin
    inc(j);
    k1:=getf(a[j].x);
    k2:=getf(a[j].y);
    if k1<>k2 then
    begin
      inc(i);
      fa[k1]:=k2;
      ans:=ans+a[j].len;
    end;
  end;
  writeln(ans);
end.

bzoj1232的更多相关文章

  1. 【bzoj1232】[Usaco2008Nov]安慰奶牛cheer(最小生成树)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1232 这道题要保留的道路肯定是原图的一棵生成树,因为要保留n-1条边,且使删边后的图连 ...

  2. [bzoj1232][Usaco2008Nov]安慰奶牛cheer_Kruskal

    安慰奶牛 cheer bzoj-1232 Usaco-2008 Nov 题目大意:给定一个n个点,m条边的无向图,点有点权,边有边权.FJ从一个点出发,每经过一个点就加上该点点权,每经历一条边就加上该 ...

  3. [BZOJ1232][[Usaco2008Nov]安慰奶牛cheer(MST)

    题目:http://hzwer.com/2493.html 分析:对于每条边,贡献的价值是这条边的边权加上这条边连接的两点的权值,所以可以把每条边的边权加上两顶点的点权作为新的边权,然后跑个最小生成树 ...

  4. BZOJ1232: [Usaco2008Nov]安慰奶牛cheer

    1232: [Usaco2008Nov]安慰奶牛cheer Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 578  Solved: 403[Submi ...

  5. 【最小生成树】Bzoj1232 [Usaco2008Nov]安慰奶牛cheer

    Description Farmer John变得非常懒, 他不想再继续维护供奶牛之间供通行的道路. 道路被用来连接N (5 <= N <= 10,000)个牧场, 牧场被连续地编号为1. ...

  6. 【bzoj1232】[Usaco2008Nov]安慰奶牛cheer

    问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路, ...

  7. BZOJ1232: [Usaco2008Nov]安慰奶牛cheer(最小生成树)

    题意:给一个图 需要找到一个子图使得所有点都连通 然后再选择一个点做为起点 走到每个点并回到起点 每条边,每个点被经过一次就要花费一次边权.点权 题解:肯定是找一颗最小生成树嘛 然后惊奇的发现 任意选 ...

  8. [bzoj1232]安慰奶牛

    先考虑边的代价,容易发现每一条边都需要走两次,也就是2*边权再考虑点的代价,由于上面的结论,那么就是度数*点权然后就可以构造新的边权为2*原边权+连接点的点权,然后求最小生成树即可注意根还有一个点权, ...

  9. [Usaco 再次除草]

    以后都用自己的号交吧 免得掉人品 Noip2016就是一个见证 一步一个脚印的刷 noip没把前两题稳拿就刷牛头..   bzoj1230 线段树打翻转标记,练手感 bzoj1231 状态压缩 预处理 ...

随机推荐

  1. jasper3

    package jasper; import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileOutputStr ...

  2. pageContext.request.contextPath

    jsp:<c:set var="ctxStatic" value="${pageContext.request.contextPath}"/>嵌套d ...

  3. 快速排序算法(C#实现)

    想到了快速排序,于是自己就用C#实现了快速排序的算法: 快速排序的基本思想:分治法,即,分解,求解,组合 . 分解:在 无序区R[low..high]中任选一个记录作为基准(通常选第一个记录,并记为k ...

  4. mysql数据库文件默认保存目录(windows)

    如果没有自己去设置安装路径,MYSQL默认安装在C:/Program Files/MySQL/MySQL Server 5.1,新建的数据库文件在C:/Documents and Settings/A ...

  5. Google Maps API 调用实例

    本实例介绍如何调用Google Maps API,并实现用鼠标标注地图,保存进数据库,以及二次加载显示等. 1.需要新建一个自定义控件(如:Map.ascx),用于显示Google地图: <%@ ...

  6. 【转】Html标签大全

     Html标签大全 2013-07-05 18:22:33 分类: Python/Ruby Html标签大全 <a></a> 超文本链接 <a href="UR ...

  7. java新手笔记23 异常

    1.import package com.yfs.javase; import java.util.Scanner; //import java.lang.String;//默认导入 public c ...

  8. Myeclipse配置mybatis的xml自动提示

    关于mapper的xml的文件的自动提示 mapper头: <?xml version="1.0" encoding="UTF-8"?><!D ...

  9. Linux命令——监视相关

    1.netstat 用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Membershi ...

  10. AJAX 一些常用方法

    abort() 停止当前请求getAllResponseHeaders() 返回包含HTTP请求的所有响应头信息,其中响应头包括Content-Length,Date,URI等内容.getRespon ...