Description

因为一场不小的地震,Y 省n 个城市之间的道路都损坏掉了,省长希望小X 将城市之间的道路重修一遍。
很多城市之间的地基都被地震破坏导致不能修路了,因此可供修建的道路只有m 条。因为施工队伍有限,省长要求用尽量少的道路将所有的城市连通起来,这样施工量就可以尽量少。不过,省长为了表示自己的公正无私,要求在满足上述条件的情况下,选择一种方案,使得该方案中最贵道路的价格和最便宜道路的价格的差值尽量小,即使这样的方案会使总价提升很多也没关系。
小X 现在手忙脚乱,希望你帮帮他。

2 ≤ n ≤ 2000,0 ≤ m ≤ 15000

Solution

发现O(nm)O(nm)可以过耶!
先把边按大小排个序,
对于每条边,扫一遍全局,看看有没有环,有的话把环上最小的边去掉,
每次判断一下是不是联通的,是则更新答案,

复杂度:O(nm+mlog(m))O(nm+m\log(m))

Code

#include <cstdio>
#include <cstdlib>
#include <algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define efo(i,q) for(int i=A[q];i;i=B[i][0])
#define min(q,w) ((q)<(w)?(q):(w))
#define max(q,w) ((q)>(w)?(q):(w))
using namespace std;
const int N=2005;
int read(int &n)
{char ch=' ';int q=0,w=1;for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar());if(ch=='-')w=-1,ch=getchar();for(;ch>='0' && ch<='9';ch=getchar())q=q*10+ch-48;n=q*w;return n;
}
int n,m,ans,FD;
struct qqww
{int x,y,v;
}b[N*8];
bool z[N*8];
int B[N*16][5],A[N],B0=1;
bool PX(qqww q,qqww w){return q.v<w.v;}
void DLT(int q)
{if(B[q][3])B[B[q][3]][0]=B[q][0];else A[B[q^1][1]]=B[q][0];B[B[q][0]][3]=B[q][3];
}
void link(int q,int w,int e,int e1)
{B[++B0][0]=A[q],B[A[q]][3]=B0,A[q]=B0,B[B0][1]=w,B[B0][2]=e,B[B0][4]=e1;B[++B0][0]=A[w],B[A[w]][3]=B0,A[w]=B0,B[B0][1]=q,B[B0][2]=e,B[B0][4]=e1;
}
void dfs(int q,int fa,int zd,int mi)
{if(q==zd){FD=mi;return;}efo(i,q)if(B[i][1]!=fa){if(B[i][2]>B[mi][2])dfs(B[i][1],q,zd,mi);else dfs(B[i][1],q,zd,i);if(FD)return;}
}
int main()
{int q,w,e;read(n),read(m);fo(i,1,m)read(b[i].x),read(b[i].y),read(b[i].v);sort(b+1,b+1+m,PX);ans=2e9;int mi=1,x,y;q=0;B[0][2]=1e9;fo(i,1,m){int x=b[i].x,y=b[i].y;FD=0;dfs(x,0,y,0);if(!FD)q++;else {z[B[FD][4]]=1;DLT(FD),DLT(FD^1);}link(x,y,b[i].v,i);while(z[mi])mi++;if(q==n-1)ans=min(ans,b[i].v-b[mi].v);}if(ans==2e9)printf("-1\n");else printf("%d\n",ans);return 0;
}

【JZOJ 3806】小X 的道路修建相关推荐

  1. JZOJ 3806. 【NOIP2014模拟8.24】小X 的道路修建

    Description 因为一场不小的地震,Y 省n 个城市之间的道路都损坏掉了,省长希望小X 将城市之间的道路重修一遍. 很多城市之间的地基都被地震破坏导致不能修路了,因此可供修建的道路只有m 条. ...

  2. Jzoj3806 小X 的道路修建

    给你一个图,求一个最大边和最小边差值最小的生成树 首先我们可以枚举最小边,每次跑一个最小生成树即可 但是这样会超时,我们考虑优化 采用最优性剪枝,假设我们当前树中的最小边是i,当前边是j,当前最优答案 ...

  3. P4878 道路修建-美国

    http://www.tyvj.cn/p/4878道路修建 我想我经大神点拨后终于明白了...回学校再写吧 时间限制:1s 内存限制:256MB [问题描述] A国是一个商业高度发达的国家.它包含了n ...

  4. 2435: [Noi2011]道路修建

    2435: [Noi2011]道路修建 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2188  Solved: 639 [Submit][Stat ...

  5. bzoj 2435: [Noi2011]道路修建 树上 dp

    2435: [Noi2011]道路修建 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  6. 【bzoj 2435】[Noi2011]道路修建(dfs)

    2435: [Noi2011]道路修建 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3505  Solved: 1167 [Submit][Sta ...

  7. 【BZOJ-2435】道路修建 (树形DP?)DFS

    2435: [Noi2011]道路修建 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3115  Solved: 1002 [Submit][Sta ...

  8. bzoj 2435: [Noi2011]道路修建(DFS)

    2435: [Noi2011]道路修建 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 4110  Solved: 1429 [Submit][Sta ...

  9. tyvj4878 道路修建 双连通分量+单调队列

    Description A国是一个商业高度发达的国家.它包含了n座城市,每座城商业都很发达.但不幸的是,A国的交通并没有像其商业那么发达,它仅仅保证了任意两座城市之间有路径存在,而且只存在唯一的一条! ...

最新文章

  1. visual studio asmx 调试_通过Windows Visual Studio远程调试WSL2中的.NET Core Linux应用程序...
  2. 智能体到底是什么?这里有一篇详细解读
  3. 将中缀表达式转化为后缀表达式
  4. sklearn做交叉验证
  5. Android 获取SD卡的图片资源
  6. 安装windows 2003 R2额外域控制器时出现1168错误的解决
  7. c语言通用Makefile
  8. linux 4.4内核是什么,Linux 内核 4.4 LTS 将于2016年1月10日发布
  9. 提取一个二进制位最右侧的1
  10. Hibernate各种主键生成策略与配置详解
  11. 取pi的前8位的解压密码_两种方式实现取16位变量的高低8位, 不严谨对比
  12. Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
  13. vue element-ui只有一条信息时默认选中按钮,且不能取消,多条信息时可以手动选择
  14. CentOS7学习笔记--PHP环境安装
  15. 在线php网站扫描,php实现在线端口扫描实例代码_PHP教程
  16. 《出发吧一起》第二阶段个人总结——Day08
  17. linux ftdi 虚拟,linux – 由FTDI USB串行转换器创建的监控(嗅探)/ dev / ttyUSB0
  18. python编程设计圆柱_《学习PYTHON—做个有编程能力的设计师》怎么样_目录_pdf在线阅读 - 课课家教育...
  19. NVIDIA Nsight Systems 入门及使用
  20. 微信棋牌H5游戏开发教程以及如何有效防止被人恶意攻击

热门文章

  1. maya软件需要计算机配置,【答疑】Maya软件对电脑的配置要求 - 视频教程线上学...
  2. ETCD 源码学习--lease(一)
  3. leetcode 分tag
  4. uos系统中windows格utf8编码文件转GBK
  5. 当前主流电脑的BIOS调出键
  6. 【聆思CSK6 视觉AI开发套件试用】基于CSK6011a_nano的虚拟打砖块交互系统
  7. python trutle画五星红旗
  8. Vs2005报表设计器XML分析总结 作者:长江支流
  9. Docker更换容器存储路径Root-dir
  10. linux红帽给文件加密,红帽大神制作 Linux 工具,用于旧款罗技无线键盘加密设置...