题目链接:http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11464&courseid=132

题目:

修路
Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:32768KB
 
Problem 11464 : No special judgement
Problem description
  在X国家,有n个城市,只有在城市才有加油站,现在国王决定修一些道路来使这n个城市链接起来,使得任意二个城市可以互相到达。由于经济危机,现在国王只有y元用来修路。由于只有在城市里才有加油站,所以当一条道路太长的时候,车辆由于油量不够,不同在这两个城市间互相到达。所以国王要求每条道路不能太长,即使得修的道路中最长的道路最短。现在问你最长的道路的长度。
Input
  包含多组数据,每组数据第一行为一个数n m 和y,表示n个城市和m条可以修的道路,y元的修路费2<=n<=10000 1<=m<=100000,1<=y<=100000。
接下来m行每行有四个整数u v c d 表示该道路链接城市u和v 修路的费用为c长度为d。
1<=u,v<=n   1<=d<=100000  1<=c<=10
Output
  对于每组数据,输出一个整数,表示修路中的最长的道路的长度,如果修的道路不能任意二个城市可以互相到达 则输出 -1。
Sample Input
3 2 10
1 2 2 1
1 3 2 5 3 3 10
1 2 5 2
2 1 6 1
1 3 5 1 3 2 100
1 2 1 1
1 2 2 2
Sample Output
5
2
-1

思路:题意为在满足费用y的情况下,将所有的城市连起来,并且使选择的所有道路中,最长的那一条最短,故可以枚举最长道路的长度,然后检验在这种长度内的道路能否符合国王的要求,找到一个最小值即为答案,其中枚举过程采用二分优化,检验过程用并查集,代码如下~。

代码如下:

 #include "stdio.h"
#include "string.h"
#include "stdlib.h" #define N 110000 struct node{
int x,y;
int dist,cost;
}a[N]; int cmp(const void *a,const void *b)
{
struct node *c = (node *)a;
struct node *d = (node *)b;
return c->cost - d->cost;
} int set[N]; int find(int x) //找根节点
{
return set[x]==x?x:set[x]=find(set[x]);
} int n,m,y; bool Pudge(int k) //判断函数,判断以k为最长道路(y为最大费用)的要求下能否建成。
{
int i;
int num = ;
int sum = ;
int fa,fb;
for(i=; i<=n; ++i)
set[i] = i;
for(i=; i<m; ++i)
{
if(a[i].dist>k) continue;
fa = find(a[i].x);
fb = find(a[i].y);
if(fa==fb) continue;
num++;
sum += a[i].cost;
set[fa] = fb;
if(num==n-)
{
if(sum<=y)
return true;
return false;
}
}
return false;
} int main()
{
int i;
int r,l,mid;
while(scanf("%d %d %d",&n,&m,&y)!=EOF)
{
r = ;
l = ;
for(i=; i<m; ++i)
{
scanf("%d %d %d %d",&a[i].x,&a[i].y,&a[i].cost,&a[i].dist);
r = r>a[i].dist?r:a[i].dist;
}
qsort(a,m,sizeof(a[]),cmp);
if(!Pudge(r)) { printf("-1\n"); continue; } //若道路取最大值的情况下,仍然建不了道路,输入-1;
while(l!=r) //二分验证
{
mid = (l+r)/;
if(Pudge(mid))
r = mid;
else
l = mid+;
}
printf("%d\n",l);
}
return ;
}

湖南师范大学第五届大学生计算机程序设计竞赛--G--修路的更多相关文章

  1. 湖南省第十二届大学生计算机程序设计竞赛 G Parenthesis

    1809: Parenthesis Description Bobo has a balanced parenthesis sequence P=p1 p2…pn of length n and q ...

  2. 2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解

    2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解 update10.01 突然发现叉姐把这场的题传到牛客上了,现在大家可以有地方提交了呢. 不知道该干什么所以就来水一篇题解 ...

  3. 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)

    原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...

  4. 湖南省第十三届大学生计算机程序设计竞赛 Football Training Camp 贪心

    2007: Football Training Camp[原创-转载请说明] Submit Page   Summary   Time Limit: 1 Sec     Memory Limit: 1 ...

  5. 希尔加密算法(湖南师范大学第六届大学生计算机程序设计竞赛)hnuoj11552

    解密 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users: 2, Accept ...

  6. 湖南省第十二届大学生计算机程序设计竞赛 F 地铁 多源多汇最短路

    1808: 地铁 Description Bobo 居住在大城市 ICPCCamp. ICPCCamp 有 n 个地铁站,用 1,2,…,n 编号. m 段双向的地铁线路连接 n 个地铁站,其中第 i ...

  7. 【树状数组】CSU 1811 Tree Intersection (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1811 题目大意: 一棵树,N(2<=N<=105)个节点,每个节点有一种颜 ...

  8. 湖南省第八届大学生计算机程序设计竞赛(A,B,C,E,F,I,J)

    A 三家人 Description 有三户人家共拥有一座花园,每户人家的太太均需帮忙整理花园.A 太太工作了5 天,B 太太则工作了4 天,才将花园整理完毕.C 太太因为正身怀六甲无法加入她们的行列, ...

  9. 第十一届“蓝狐网络杯”湖南省大学生计算机程序设计竞赛 B - 大还是小? 字符串水题

    B - 大还是小? Time Limit:5000MS     Memory Limit:65535KB     64bit IO Format: Description 输入两个实数,判断第一个数大 ...

随机推荐

  1. HNU 13308 Help cupid

    Help cupid Problem's Link: http://acm.hnu.cn/online/?action=problem&type=show&id=13308&c ...

  2. Mysql –>EF edmx(model first)–> Sql server table

    一.mysql environment When we create an new database,first We need draw er diagram for somebody to sho ...

  3. Shiro 整合SpringMVC 并且实现权限管理,登录和注销

    Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大 ...

  4. TCMalloc优化MySQL、Nginx内存管理

    TCMalloc的全称为Thread-Caching Malloc,是谷歌开发的开源工具google-perftools中的一个成员. 与标准的glibc库的Malloc相比,TCMalloc库在内存 ...

  5. Oracle 查询并删除重复记录的SQL语句

    查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select  ...

  6. 文科生也能看懂的iptables教程(转载)

    据说还是个MM, 写得很通俗易懂, 还很诙谐, 原文:http://dallascao.com/cn/iptables-tutorial-for-newbies/ 对于斗胆开始玩vps的文科生来讲,i ...

  7. 数码管问题(c++实现)

    描述:液晶数码管用七笔阿拉数字表示的十个数字,把横和竖的一 个短划都称为一笔,即7有3笔,8有7笔等.对于十个数字一种排列,要做到 两相邻数字都可以由另一个数字加上几笔或减去几笔组成,但不能又加又减. ...

  8. Android WelcomeActivity 启动画更换网络图片

    1.运行效果  第一张是本地的启动图,第二张是网络启动图       2.用到的第三方jar包   Android-Universal-Image-Loader-master 不熟的请看  Andro ...

  9. dict和set

    #dict和set #dict #Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map #使用键-值(key-value)存储,具有极快的查找速度. #字 ...

  10. 【读书笔记】iOS网络-HTTP-URL结构

    http://user:password@hostname:port/absolute-path?query. http:  协议 user:password@   认证 hostname:  主机名 ...