题目描述

约翰农场的牛群希望能够在 N 个(1<=N<=200) 草地之间任意移动。草地的编号由 1到 N。草地之间有树林隔开。牛群希望能够选择草地间的路径,使牛群能够从任一 片草地移动到任一片其它草地。 牛群可在路径上双向通行。

牛群并不能创造路径,但是他们会保有及利用已经发现的野兽所走出来的路径(以 下简称兽径)。每星期他们会选择并管理一些或全部已知的兽径当作通路。

牛群每星期初会发现一条新的兽径。他们接着必须决定管理哪些兽径来组成该周牛 群移动的通路,使得牛群得以从任一草地移动到任一草地。牛群只能使用当周有被 管理的兽径做为通路。

牛群希望他们管理的兽径长度和为最小。牛群可以从所有他们知道的所有兽径中挑 选出一些来管理。牛群可以挑选的兽径与它之前是否曾被管理无关。

兽径决不会是直线,因此连接两片草地之间的不同兽径长度可以不同。 此外虽然 两条兽径或许会相交,但牛群非常的专注,除非交点是在草地内,否则不会在交点 换到另外一条兽径上。

在每周开始的时候,牛群会描述他们新发现的兽径。如果可能的话,请找出可从任 何一草地通达另一草地的一组需管理的兽径,使其兽径长度和最小。

输入输出格式

输入格式:

输入的第一行包含两个用空白分开的整数 N 和 W。W 代表你的程序需要处理 的周数. (1 <= W <= 6000)。

以下每处理一周,读入一行数据,代表该周新发现的兽径,由三个以空白分开 的整数分别代表该兽径的两个端点 (两片草地的编号) 与该兽径的长度(1…10000)。一条兽径的两个端点一定不同。

输出格式:

每次读入新发现的兽径后,你的程序必须立刻输出一组兽径的长度和,此组兽径可从任何一草地通达另一草地,并使兽径长度和最小。如果不能找到一组可从任一草地通达另一草地的兽径,则输出 “-1”。

输入输出样例

输入样例#1:

  1. 4 6
  2. 1 2 10
  3. 1 3 8
  4. 3 2 3
  5. 1 4 3
  6. 1 3 6
  7. 2 1 2
输出样例#1:

  1. -1 //No trail connects 4 to the rest of the fields.
  2. -1 //No trail connects 4 to the rest of the fields.
  3. -1 //No trail connects 4 to the rest of the fields.
  4. 14 //Maintain 1 4 3, 1 3 8, and 3 2 3.
  5. 12 //Maintain 1 4 3, 1 3 6, and 3 2 3.
  6. 8 //Maintain 1 4 3, 2 1 2, and 3 2 3.
  7. //program exit
  8.  
  9. 最小生成树+插入排序
    所谓插入排序

    点击进入插入排序学习网站
    屠龙宝刀点击就送
  1. #include <algorithm>
  2. #include <cstdio>
  3.  
  4. #define Max 200
  5. #define syl main
  6. using namespace std;
  7.  
  8. struct node
  9. {
  10. int x,y,z;
  11. }edge[Max*Max*];
  12. int cnt,i,j,fa[Max*],n,w;
  13. void add(int u,int v,int l)
  14. {
  15. node*now=&edge[++cnt];
  16. now->x=u;
  17. now->y=v;
  18. now->z=l;
  19. }
  20. bool cmp(node a,node b)
  21. {
  22. return a.z<b.z;
  23. }
  24. int find_fa(int k)
  25. {
  26. return fa[k]==k?k:fa[k]=find_fa(fa[k]);
  27. }
  28. int kruskal()
  29. {
  30. for(int i=;i<=n;++i) fa[i]=i;
  31. int ans=,k=;
  32. for(int i=;i<=cnt;++i)
  33. {
  34. int fx=find_fa(edge[i].x),fy=find_fa(edge[i].y);
  35. if(fx!=fy)
  36. {
  37. k++;
  38. fa[fy]=fx;
  39. ans+=edge[i].z;
  40. if(k==n-) return ans;
  41. }
  42. }
  43. return -;
  44. }
  45. void qr(int &x)
  46. {
  47. x=;bool f=;
  48. char ch=getchar();
  49. while(ch>''||ch<'')
  50. {
  51. if(ch=='-') f=;
  52. ch=getchar();
  53. }
  54. while(ch>=''&&ch<='')
  55. {
  56. x=x*+(int)ch-;
  57. ch=getchar();
  58. }
  59. x=f?(~x)+:x;
  60. }
  61. void InsertSort(int size)
  62. {
  63. int i,j,key,fr,t;
  64. for(i=;i<size;++i)
  65. {
  66. key=edge[i].z;
  67. fr=edge[i].x;
  68. t=edge[i].y;
  69. for(j=i-;j>=;--j)
  70. {
  71. if(edge[j].z>key)
  72. {
  73. edge[j+].z=edge[j].z;
  74. edge[j+].x=edge[j].x;
  75. edge[j+].y=edge[j].y;
  76. }
  77. else break;
  78. }
  79. edge[j+].z=key;
  80. edge[j+].x=fr;
  81. edge[j+].y=t;
  82. }
  83. }
  84. int syl()
  85. {
  86. qr(n);qr(w);
  87. for(int x,y,z;w--;)
  88. {
  89. qr(x);qr(y);qr(z);
  90. add(x,y,z);
  91. InsertSort(cnt+);
  92. printf("%d\n",kruskal());
  93. }
  94. return ;
  95. }

洛谷 P1340 兽径管理的更多相关文章

  1. 2021.08.05 P1340 兽径管理(最小生成树)

    2021.08.05 P1340 兽径管理(最小生成树) P1340 兽径管理 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.离线化. 题意: 有n个点,m条边,每次加 ...

  2. P1340 兽径管理 洛谷

    https://www.luogu.org/problem/show?pid=1340 题目描述 约翰农场的牛群希望能够在 N 个(1<=N<=200) 草地之间任意移动.草地的编号由 1 ...

  3. luogu P1340 兽径管理

    题目描述 约翰农场的牛群希望能够在 N 个(1<=N<=200) 草地之间任意移动.草地的编号由 1到 N.草地之间有树林隔开.牛群希望能够选择草地间的路径,使牛群能够从任一 片草地移动到 ...

  4. P1340 兽径管理

    传送门 思路: 题目要求每次连边都要输出最小生成树的边权和.如果在线直接套用最小生成树模板肯定会超时,考虑离线处理.记录每一插入边的时间,在所有边都插入完成后排序一遍就可以求最小生成树(按照插入时间的 ...

  5. 【洛谷1340】兽径管理(最小生成树 Kruskal)(sort的一些技巧)【2012福建省信息学奥林匹克CCF NOIP夏令营第05天训练】

    Description 约翰农场的牛群希望能够在 N 个(1<=N<=6000) 草地之间任意移动.草地的编号由 1到 N.草地之间有树林隔开.牛群希望能够选择草地间的路径,使牛群能够从任 ...

  6. 【u015】兽径管理

    [问题描述] 约翰农场的牛群希望能够在 N 个(1<=N<=200)草地之间任意移动.草地的编号由 1到N.草地之间有树林隔开.牛群希望能够选择草地间的路径,使牛群能够从任一 片草地移动到 ...

  7. 洛谷 P2146 [NOI2015]软件包管理器

    真没有想到,这竟然会是一道NOI的原题,听RQY说,这套题是北大出的,北大脑抽认为树剖很难... 只恨没有早学几年OI,只A这一道题也可以出去吹自己一A了NOI原题啊 好了,梦该醒了,我们来看题 以后 ...

  8. 洛谷 P2146 [NOI2015]软件包管理器 解题报告

    P2146 [NOI2015]软件包管理器 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软 ...

  9. 洛谷 P2146 [NOI2015]软件包管理器 (树链剖分模板题)

    题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个 ...

随机推荐

  1. Firebug 的脚本页面不能用

    1.遇到这种情况,一般重置firebug,然后开启“脚本“功能,刷新页面,就能显示正常 2.要不就是 版本问题,50.0不行,下载回49版本就可以了

  2. codevs-1204

    1204 寻找子串位置 题目描述 Description 给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置. 输入描述 Input Description 仅一行包含两个 ...

  3. python 之单例

    # 单例模式 class MySQL: __instance = None def __init__(self): self.host = '127.0.0.1' self.port = 3306 @ ...

  4. Flutter实战视频-移动电商-09.首页_项目结构建立和获取数据

    09.首页_项目结构建立和获取数据 在config下创建service_url.dart 用来配置我们后端接口的配置文件 一个变量存 接口地址,一个接口方法地址 所有后天请求数据的方法都放在这个文件夹 ...

  5. 利用StringBuffer来替换内容

    package com.test.java; public class StringBufferTest { public static void main(String[] args) { Stri ...

  6. Git之设置对文件名大小写敏感

    关键命令 git config core.ignorecase false

  7. memcached连接说明

    memcached 客户端与服务器端通信使用的基于文本的协议,不是二进制,可通过Telnet进行互交

  8. vr的延迟和渲染效率优化与Nvidia VRWorks

    http://blog.csdn.net/leonwei/article/details/50966071 vr现在正处于风生水起的阶段,但是vr的性能一直是大问题,最主要的问题就是响应延迟,玩家改变 ...

  9. JDK 重要目录结构

    \bin 目录包含 Java 的开发工具,包括 Java 编译器 javac.exe.Java 解释器 java.exe 等: javac:Java 编译器,用来将 Java 程序编译成字节码 jav ...

  10. 编译出现No rule to make target `out/host/linux-x86/bin/aapt', needed by `out/target/common/obj/APPS/MyTv4_intermediates/src/R.stamp'问题

    查找路径发现的确没有MyTv4_intermediates/src/R.stamp,这需要生成这个文件