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

P1340 兽径管理 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

重点:

1.离线化。

题意:

有n个点,m条边,每次加入一条边,求加边后形成的最小生成树的大小。

分析:

先把加边顺序储存起来,倒序删边,如果生成树中有边被删去,重建生成树。

代码如下:

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cstring>
  5. using namespace std;
  6. const int N=210;
  7. int n,m,fa[N],vis[6010],ans[6010],dlt[6010];
  8. struct node{
  9. int from,to,id,len;
  10. bool operator <(const node &b)const{
  11. return len<b.len;
  12. }
  13. }line[6010];
  14. inline int read(){
  15. int s=0,w=1;
  16. char ch=getchar();
  17. while(ch<'0'||ch>'9'){
  18. if(ch=='-')w=-1;
  19. ch=getchar();
  20. }
  21. while(ch<='9'&&ch>='0'){
  22. s=s*10+ch-'0';
  23. ch=getchar();
  24. }
  25. return s*w;
  26. }
  27. int find(int x){
  28. return fa[x]==x?x:fa[x]=find(fa[x]);
  29. }
  30. void kruskal(int x){
  31. //cout<<" case 1 "<<x<<endl;//
  32. memset(vis,0,sizeof(vis));
  33. for(int i=1;i<=n;i++)fa[i]=i;
  34. int js=0;
  35. for(int i=1;i<=m;i++){
  36. if(dlt[line[i].id])continue;
  37. int u=find(line[i].from),v=find(line[i].to);
  38. if(u!=v){
  39. ++js;
  40. vis[line[i].id]=1;
  41. ans[x]+=line[i].len;
  42. fa[u]=v;
  43. }
  44. if(js==n-1)break;
  45. }
  46. if(js!=n-1)ans[x]=-1;
  47. }
  48. int main(){
  49. n=read();m=read();
  50. for(int i=1;i<=m;i++){
  51. line[i].from=read();line[i].to=read();line[i].len=read();
  52. line[i].id=i;
  53. }
  54. sort(line+1,line+m+1);
  55. kruskal(m);
  56. for(int i=m-1;i>=1;i--){
  57. dlt[i+1]=1;
  58. if(vis[i+1])kruskal(i);
  59. else ans[i]=ans[i+1];
  60. if(ans[i]==-1){
  61. for(int j=1;j<i;j++)ans[j]=-1;
  62. break;
  63. }
  64. }
  65. for(int i=1;i<=m;i++)cout<<ans[i]<<endl;
  66. return 0;
  67. }

2021.08.05 P1340 兽径管理(最小生成树)的更多相关文章

  1. luogu P1340 兽径管理

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

  2. 洛谷 P1340 兽径管理

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

  3. P1340 兽径管理 洛谷

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

  4. P1340 兽径管理

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

  5. 2021.08.05 P1738 洛谷的文件夹(树形结构)

    2021.08.05 P1738 洛谷的文件夹(树形结构) P1738 洛谷的文件夹 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树!! 题意: 给出n个网页路径,求 ...

  6. 2021.08.05 P5357 康托展开模板(康托展开)

    2021.08.05 P5357 康托展开模板(康托展开) P5367 [模板]康托展开 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.康托展开 算法学习笔记(56): ...

  7. 2021.08.05 P7095 不离【扶咕咕出题】(贪心)

    2021.08.05 P7095 不离[扶咕咕出题](贪心) [P7095 yLOI2020] 不离 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 游戏中人物有两个属性,我 ...

  8. 2021.08.05 P2168 荷马史诗(哈夫曼树模板)

    2021.08.05 P2168 荷马史诗(哈夫曼树模板) [P2168 NOI2015] 荷马史诗 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.k叉哈夫曼树如果子结 ...

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

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

随机推荐

  1. PCI协议 总结

    1.引脚 必要的引脚在左边,任选的引脚在右边 2.CLK in:时钟输入,为所有PCI上的接口传送提供时序.其频率也称为PCI的工作频率. 大部分信号都在CLK的上升沿有效 3.AD0~AD31 t/ ...

  2. redis持久化 RDB与AOF

    redis持久化 RDB与AOF RDB与AOF区别 rdb: 基于快照的持久化,速度更快,一般用做备份,主从复制也是依赖于rdb持久化功能 aof:以追加的方式记录redis操作日志的文件,可以最大 ...

  3. 4月13日 python学习总结 组合与封装

    一.组合      解决类与类之间代码冗余问题有两种解决方案:1.继承 2.组合 1.继承:描述的是类与类之间,什么是什么的关系 2.组合:描述的是类与类之间的关系,是一种什么有什么关系 一个类产生的 ...

  4. Apache+PHP+Mysql安装手册(Linux)

    一. 检查系统环境 1.确认centos版本 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Co ...

  5. go语言学习入门篇1---go语言的主要特性与发展

    1.1 影响 Go 语言发展的早期编程语言 正如 "21 世纪的 C 语言" 这句话所说,Go 语言并不是凭空而造的,而是和 C++.Java 和 C# 一样属于 C 系.不仅如此 ...

  6. 通过PROFINET实现S7-1200与CU320-2 PN S120通讯

    1.概述 S7-1200 与 CU320-2PN 之间通过 PROFINET IO 可进行周期性及非周期性数据通讯. 使用 S7 功能块 DPWR_DAT/DPRD_DAT,S7-1200PLC 通过 ...

  7. Java基础 - 注解详解

    What - 什么是注解?        Annontation是Java5开始引入的新特征,中文名称叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素( ...

  8. Kerberos与各大组件的集成

    1. 概述 Kerberos可以与CDH集成,CDH里面可以管理与hdfs.yarn.hbase.yarn.kafka等相关组件的kerberos凭证.但当我们不使用CDH的时候,也需要了解hdfs. ...

  9. Files的常用方法都有哪些?

    Files. exists():检测文件路径是否存在.Files. createFile():创建文件.Files. createDirectory():创建文件夹.Files. delete():删 ...

  10. 用 wait-notify 写一段代码来解决生产者-消费者问题?(答案)

    请参考答案中的示例代码.只要记住在同步块中调用 wait() 和 notify()方法,如果阻塞,通过循环来测试等待条件.