问题描述

试题编号: 201703-4
试题名称: 地铁修建
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市决定在1号到n号枢纽间修建一条地铁。
  地铁由很多段隧道组成,每段隧道连接两个交通枢纽。经过勘探,有m段隧道作为候选,两个交通枢纽之间最多只有一条候选的隧道,没有隧道两端连接着同一个交通枢纽。
  现在有n家隧道施工的公司,每段候选的隧道只能由一个公司施工,每家公司施工需要的天数一致。而每家公司最多只能修建一条候选隧道。所有公司同时开始施工。
  作为项目负责人,你获得了候选隧道的信息,现在你可以按自己的想法选择一部分隧道进行施工,请问修建整条地铁最少需要多少天。
输入格式
  输入的第一行包含两个整数n, m,用一个空格分隔,分别表示交通枢纽的数量和候选隧道的数量。
  第2行到第m+1行,每行包含三个整数a, b, c,表示枢纽a和枢纽b之间可以修建一条隧道,需要的时间为c天。
输出格式
  输出一个整数,修建整条地铁线路最少需要的天数。
样例输入
6 6
1 2 4
2 3 4
3 6 7
1 4 2
4 5 5
5 6 6
样例输出
6
样例说明
  可以修建的线路有两种。
  第一种经过的枢纽依次为1, 2, 3, 6,所需要的时间分别是4, 4, 7,则整条地铁线需要7天修完;
  第二种经过的枢纽依次为1, 4, 5, 6,所需要的时间分别是2, 5, 6,则整条地铁线需要6天修完。
  第二种方案所用的天数更少。
评测用例规模与约定
  对于20%的评测用例,1 ≤ n ≤ 10,1 ≤ m ≤ 20;
  对于40%的评测用例,1 ≤ n ≤ 100,1 ≤ m ≤ 1000;
  对于60%的评测用例,1 ≤ n ≤ 1000,1 ≤ m ≤ 10000,1 ≤ c ≤ 1000;
  对于80%的评测用例,1 ≤ n ≤ 10000,1 ≤ m ≤ 100000;
  对于100%的评测用例,1 ≤ n ≤ 100000,1 ≤ m ≤ 200000,1 ≤ a, b ≤ n,1 ≤ c ≤ 1000000。

  所有评测用例保证在所有候选隧道都修通时1号枢纽可以通过隧道到达其他所有枢纽。

题目链接:

  http://cspro.org/lead/leadbpm.do?__action=goto_iframe&path=CCF_KS_KSLX_LIST&djtype=TT&2

题目大意:

  N个城市M条道路,每条道路修建耗时为X,同时开工,问把1和n连接起来的最小耗时。

题目思路:

  【最小生成树+并查集】

  这题用最小生成树或者最短路都能做。考场上第一反应就是MST了。

  将边按照耗时从小到大排序,接下来一条条往里加,直到加后连接1和n就停止。此时的耗时即为总耗时。

  判断1和n是否联通可以用并查集判断。

/****************************************************

    Author : Coolxxx
Copyright 2017 by Coolxxx. All rights reserved.
BLOG : http://blog.csdn.net/u010568270 ****************************************************/
#include<bits/stdc++.h>
#pragma comment(linker,"/STACK:1024000000,1024000000")
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define mem(a,b) memset(a,b,sizeof(a))
#define eps (1e-8)
#define J 10000
#define mod 1000000007
#define MAX 0x7f7f7f7f
#define PI 3.14159265358979323
#define N 100004
using namespace std;
typedef long long LL;
double anss;
LL aans;
int cas,cass;
int n,m,lll,ans;
int fa[N];
struct xxx
{
int b,e,d;
}a[N+N];
int cmp(xxx aa,xxx bb)
{
return aa.d<bb.d;
}
int zhao(int aa)
{
if(fa[aa]==aa || fa[aa]==)return aa;
return fa[aa]=zhao(fa[aa]);
}
int main()
{
#ifndef ONLINE_JUDGE
// freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
int i,j,k;
int x,y,z;
// for(scanf("%d",&cass);cass;cass--)
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
// while(~scanf("%s",s))
while(~scanf("%d",&n))
{
mem(fa,);
scanf("%d",&m);
for(i=;i<=m;i++)
scanf("%d%d%d",&a[i].b,&a[i].e,&a[i].d);
sort(a+,a++m,cmp);
for(i=;i<=m;i++)
{
x=a[i].b;
y=a[i].e;
int fx=zhao(x);
int fy=zhao(y);
if(fx!=fy)fa[fy]=fx;
if(zhao()==zhao(n))break;
}
printf("%d\n",a[i].d);
}
return ;
}
/*
// //
*/

最新文章

  1. DNG格式解析
  2. [javaSE] 反射-方法的反射
  3. 手机web页面制作时的注意事项
  4. fiddler实现手机端抓包(代理)
  5. PHP实现微信公众账号开发
  6. myBatis 实现用户表增删查改操作&lt;方法2 加入接口&gt;(最终版)
  7. DNS服务器配置
  8. Java开发中经典的小实例-(随机数)
  9. phpcms v9后台美化需要修改的部分整理
  10. [重写库函数]atoi
  11. 顺序栈之C++实现
  12. phpmailer【PHP邮件】的用法
  13. hadoop高可靠性HA集群
  14. C/C++内存布局及对齐
  15. ubuntu16.04利用deb包安装mysql
  16. SuperMap iServer 扩展/JAVA API 系列博客整理
  17. python 之 函数的参数
  18. JavaScrip之BOM、DOM
  19. JavaScript中标识符的命名
  20. BugPhobia准备篇章:团队Beta阶段准备工作分析

热门文章

  1. 2019ICPC西安邀请赛(计蒜客复现赛)总结
  2. 笔试算法题(25):复制拥有多个指针的链表 &amp; 判断二元树B是否为A的子树
  3. 我能考虑到的数组(老)方法就这些了(es5)
  4. IDEA基本使用及配置(1)
  5. Java 文件操作大集合
  6. iar修改包含路径的方法
  7. BNUOJ 5235 Starship Troopers
  8. 1016-Prime Ring Problem,素数环,深搜!
  9. LOJ#539. 「LibreOJ NOIP Round #1」旅游路线
  10. 交互设计:隐藏或显示大段文本的UI组件有哪些?