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

来回一条边所花费的时间=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. MVC中实现部分内容异步加载

    MVC中实现部分内容异步加载 action中定义一个得到结果集的方法 public ActionResult GetItemTree(string title, int itemid, int? pa ...

  2. 如何使用SC命令添加删除服务

    1.如何删除服务 cmd然后再输入 sc delete "服务名称" 后,回车,双引号必须为英文符号. 2.添加服务 sc create ServiceName binPath= ...

  3. C++ Dialog Box Command IDs

    #define IDOK 1 #define IDCANCEL 2 #define IDABORT 3 #define IDRETRY 4 #define IDIGNORE 5 #define IDY ...

  4. OC - 3.OC的三大特性

    一.封装 1> 封装的定义 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别 2> 封装的好处 可以通过set方法防止为成员变量设置不合理的值 仅向外部提供公 ...

  5. ios tableview 上加 textfiled

    ios tableview 上加 textfiled 首先附上我项目中用曾经用到的几张图  并说明一下我的用法: 图1: 图2: 图3: 心在你我说一下  我当初的实现 方法 ,希望能给你们一些  启 ...

  6. c#打开txt文件并导入到textbox中

    OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Title = " 请选择您要导入的模板文件:&qu ...

  7. struts2框架加载配置文件的顺序

    struts-default.xml:该文件保存在struts2-core-x.x.x.jar文件中: struts-plugin.xml:该文件保存在 struts2-Xxx-x.x.x.jar等S ...

  8. hibernate3.0 org.dom4j.DocumentException: Connection timed out: connect Nested exception:

    hibernate3.0 org.dom4j.DocumentException: Connection timed out: connect Nested exception:   所报异常: 严重 ...

  9. Java实战之01Struts2-01简介及环境搭建

    一.Struts2简介 1.Struts2概述 Struts2是Apache发行的MVC开源框架.注意:它只是表现层(MVC)框架. 2.Struts2的来历 Struts1:也是apache开发的一 ...

  10. bzoj3202:[Sdoi2013]项链

    思路:首先考虑如何求珠子个数,一个珠子由a,b,c三个数组成且属于区间[1,a],并满足gcd(a,b,c)=1.由于要求本质相同,对于a,b,c这样的一个无序的数列且满足gcd(a,b,c)=1,设 ...