题面

解析

我们先考虑一下加一条边(x,y,z)会成什么亚子:

(还有很多边不画了...)

然后我们把这个图单独拿出来:

我们可以发现,对于最小生成树的贡献,

它是等价于下面这张图的(因为连通性一样):

而同理,最前面的图也可以变成:

所以,我们只需要连三条边\((x,y,z),(x,x+1,z+1),(y,y+1,z+2)\),

最后再用\(x,y\)去更新\(x+1,y+1,x+2,y+2...\)就行了.

code:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #define ll long long
  6. #define fre(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
  7. using namespace std;
  8. inline int read(){
  9. int sum=0,f=1;char ch=getchar();
  10. while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
  11. while(ch>='0' && ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
  12. return f*sum;
  13. }
  14. const int N=200001;
  15. struct edge{int x,y;ll w;}a[N<<1];
  16. int n,m,tot,fa[N];ll f[N],ans;
  17. inline void add(int x,int y,ll z){
  18. a[++tot]=(edge){x,y,z};
  19. }
  20. inline int find(int x){return x==fa[x]? x:fa[x]=find(fa[x]);}
  21. inline bool cmp(edge a,edge b){return a.w<b.w;}
  22. int main(){
  23. n=read();m=read();
  24. for(int i=1;i<=n;i++) fa[i]=i;
  25. memset(f,0x3f,sizeof(f));
  26. while(m--){
  27. int x=read()+1,y=read()+1;ll z=read();
  28. add(x,y,z);f[x]=min(f[x],z+1);f[y]=min(f[y],z+2);
  29. }
  30. for(int i=1;i<=(n<<1);i++) f[i%n+1]=min(f[i%n+1],f[(i-1)%n+1]+2);
  31. for(int i=1;i<=n;i++) add(i,i%n+1,f[i]);
  32. sort(a+1,a+tot+1,cmp);
  33. for(int i=1;i<=tot;i++){
  34. int aa=find(a[i].x),b=find(a[i].y);
  35. if(aa!=b) ans+=a[i].w,fa[aa]=b;
  36. }
  37. printf("%lld\n",ans);
  38. return 0;
  39. }

题解 [AT2134] Zigzag MST的更多相关文章

  1. 【题解】 AT2134 Zigzag MST

    [题解]AT2134 Zigzag MST 一道MST好题 \(Anson\)有云: 要么是减少边的数量. 要么是改变连接边的方式. 那么如何减少边的数量呢?很简单,把所有不可能对答案产生贡献的边去掉 ...

  2. AT2134 Zigzag MST

    题面 题解 这个题目主要是连边很奇怪,但是我们可以发现一个性质:权值是递增的. 于是像下图的连边:(加边方式为\((A_1, B_1, 1)\)) 其实可以等价于如下连边: 于是我们将其变成了在环上连 ...

  3. [题解] [AtCoder2134] Zigzag MST

    题面 题解 考虑kruscal的过程 对于三个点\(x, y, x + 1\), 我们可以将\((x, y, z), (y, x + 1, z + 1)\)看做\((x, y, z), (x, x + ...

  4. AT2134 Zigzag MST 最小生成树

    正解:最小生成树 解题报告: 先放下传送门QAQ 然后这题,首先可以发现这神奇的连边方式真是令人头大,,,显然要考虑转化掉QAQ 大概看一下可以发现点对的规律是,左边++,交换位置,再仔细想下,就每个 ...

  5. 【AtCoder2134】ZigZag MST(最小生成树)

    [AtCoder2134]ZigZag MST(最小生成树) 题面 洛谷 AtCoder 题解 这题就很鬼畜.. 既然每次连边,连出来的边的权值是递增的,所以拿个线段树xjb维护一下就可以做了.那么意 ...

  6. leetcode题解 6.ZigZag Conversion

    6.ZigZag Conversion 题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a gi ...

  7. 《LeetBook》leetcode题解(6): ZigZag Conversion[E]

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  8. Atcoder CODE FESTIVAL 2016 Final G - Zigzag MST[最小生成树]

    题意:$n$个点,$q$次建边,每次建边选定$x,y$,权值$c$,然后接着$(y,x+1,c+1),(x+1,y+1,c+2),(y+1,x+2,c+3),(x+2,y+2,c+4)\dots$(画 ...

  9. Atcoder2134 Zigzag MST

    问题描述 We have a graph with N vertices, numbered 0 through N−1. Edges are yet to be added. We will pro ...

随机推荐

  1. 基于bootstrap selectpicker ,实现select下拉框模糊查询功能

    1.html代码块 需要引入bootstrap的css js jquery bootstrap.css bootstrap-select.min.css jquery-1.11.3.min.js bo ...

  2. 怎样创建一个独立于当前文档的新的Document对象

    使用: document.implementation. 如下所示, 新创建的Document对象可以正常使用相关属性和方法, 然后将它的根节点与当前文档的根节点做一个替换. var doc = do ...

  3. ggpubr进行“paper”组图合并,也许比PS,AI更简单

    本文转载自微信公众号 “生信补给站”,https://mp.weixin.qq.com/s/41iKTulTwGcY-dHtqqSnLA 多个图形进行组图展示,可以既展示一个“事情”的多个角度,也可以 ...

  4. C# 32位系统与64位系统调用不同的DLL文件

    string dll32 = System.Windows.Forms.Application.StartupPath + @"\System.Data.SQLite-32.DLL" ...

  5. python selenium2 模拟点击+拖动 测试对象 58同城验证码

    #!/usr/bin/python # -*- coding: UTF-8 -*- # @Time : 2019/12/5 17:30 # @Author : shenghao/10347899@qq ...

  6. 判断ubuntu是32位还是64位

    在终端输入 sudo uname -m 显示 如果显示i686,你安装了32位操作系统 如果显示 x86_64,你安装了64位操作系统 更多: sudo uname -s 显示内核名字s sudo u ...

  7. AJAX中所谓的异步

    async javascript and xml 异步的js和xml 在AJAX中的异步不是我们所理解的同步异步编程,而泛指“局部刷新”,但是我们以后的AJAX请求尽可能异步请求数据(因为异步数据获取 ...

  8. Python学习记录5-面向对象

    OOP 思想 以模块化思想解决工程问题 面向过程 vs 面向对象 由面向过程转向面向对象 常用名词 OO:面向对象 ooa:分析 ood:设计 oop:编程 ooI:实现 ooa -> ood ...

  9. maskrcnn-benchmark错误:ImportError: cannot import name rnn_compat

    错误: from apex import amp File "build/bdist.linux-x86_64/egg/apex/__init__.py", line 5, in ...

  10. cv2.videocapture()失败,无法读取视频

    原因:缺少ffmpeg的支持 解决:一般opencv3.3版本及以上支持ffmpeg,实验4.1.0成功 pip install opencv-python pip install opencv-co ...