洛谷 P2330 [SCOI2005]繁忙的都市
题目链接
https://www.luogu.org/problemnew/show/P2330
题目描述
城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造。城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连接。这些道路是双向的,且把所有的交叉路口直接或间接的连接起来了。每条道路都有一个分值,分值越小表示这个道路越繁忙,越需要进行改造。但是市政府的资金有限,市长希望进行改造的道路越少越好,于是他提出下面的要求:
1.改造的那些道路能够把所有的交叉路口直接或间接的连通起来。 2.在满足要求1的情况下,改造的道路尽量少。 3.在满足要求1、2的情况下,改造的那些道路中分值最大的道路分值尽量小。
任务:作为市规划局的你,应当作出最佳的决策,选择那些道路应当被修建。
输入输出格式
输入格式:
第一行有两个整数n,m表示城市有n个交叉路口,m条道路。
接下来m行是对每条道路的描述,u, v, c表示交叉路口u和v之间有道路相连,分值为c。(1≤n≤300,1≤c≤10000,1≤m≤100000)
输出格式:
两个整数s, max,表示你选出了几条道路,分值最大的那条道路的分值是多少。
输入输出样例
输入样例:
4 5
1 2 3
1 4 5
2 4 7
2 3 6
3 4 8
输出样例:
3 6
解题思路
首先说一下题意:给你一张n个点m条边的无向图,找出一个满足下面三个条件的图:
- 改造的那些道路能够把所有的交叉路口直接或间接的连通起来。
- 在满足要求1的情况下,改造的道路尽量少。
- 在满足要求1、2的情况下,改造的那些道路中分值最大的道路分值尽量小。
根据要求1,可知这是一个连通图。根据要求2,可知这是一棵树,n个点,n-1条边。根据要求3,可知这是一颗最小瓶颈生成树。
什么是最小瓶颈生成树呢?请看:https://www.cnblogs.com/yinyuqin/p/10779387.html#index_6
所以,我们只需要跑一边最小生成树即可。最后看输出格式,先输出边数,显然是n-1条;然后输出边权最大是多少,所以我们只要记下最小生成树中边权最大的边即可。
关于最小生成树,这里有我的两篇博客,第一篇是prim算法,第二篇是Kruskal算法。这里用的是Kruskal算法。
prim算法:https://www.cnblogs.com/yinyuqin/p/10779387.html
Kruskal算法:https://www.cnblogs.com/yinyuqin/p/10780769.html
附上AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
struct edge{
int qidian;
int zhongdian;
int value;
}bian[];
int n,m,fa[],ans=-;
bool cmp(edge a,edge b){
return a.value<b.value;
}
int find(int x){
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
int main()
{
cin>>n>>m;
for(int i=;i<=n;i++) fa[i]=i;
for(int i=;i<=m;i++){
cin>>bian[i].qidian>>bian[i].zhongdian>>bian[i].value;
}
sort(bian+,bian+m+,cmp);
for(int i=;i<=m;i++){
int p1=bian[i].qidian;
int p2=bian[i].zhongdian;
int f1=find(p1),f2=find(p2);
if(f1!=f2){
ans=max(ans,bian[i].value); //ans每一次取最小生成树上的最长边。
fa[f1]=f2;
}
}
cout<<n-<<" "<<ans; //最少一定是n-1条边。
return ;
}
AC代码
洛谷 P2330 [SCOI2005]繁忙的都市的更多相关文章
- 洛谷—— P2330 [SCOI2005]繁忙的都市
P2330 [SCOI2005]繁忙的都市 题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路 ...
- 洛谷 P2330 [SCOI2005]繁忙的都市(最小生成树)
嗯... 题目链接:https://www.luogu.org/problemnew/show/P2330 这道题的问法也实在是太模板了吧: 1.改造的道路越少越好 2.能够把所有的交叉路口直接或间接 ...
- 洛谷 P2330 [SCOI2005] 繁忙的都市 x
题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条 ...
- 洛谷P2330 [SCOI2005]繁忙的都市——kruskal
给一手链接 https://www.luogu.com.cn/problem/P2330 这道题实质就是最小生成树 TIPS:最小生成树不仅是整体权值最小,也是最大边最小 #include<cs ...
- 洛谷P2330 [SCOI2005]繁忙的都市
#include<bits/stdc++.h> using namespace std; ; ; int n,k,Max,tot; struct node{ int cnt,fa; }f[ ...
- P2330 [SCOI2005] 繁忙的都市 洛谷
https://www.luogu.org/problem/show?pid=2330#sub 题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C ...
- [LUOGU] P2330 [SCOI2005]繁忙的都市
题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条 ...
- 【BZOJ1083】[SCOI2005]繁忙的都市(最小生成树)
[BZOJ1083][SCOI2005]繁忙的都市(最小生成树) 题面 BZOJ 洛谷 题解 模板题. #include<iostream> #include<cstdio> ...
- BZOJ 1083: [SCOI2005]繁忙的都市 kruskal
1083: [SCOI2005]繁忙的都市 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1083 Description 城市C是一个非 ...
随机推荐
- Frame Interpolation
对于视频网站.电视厂商以及进行视频压制的用户来说,改变视频的帧率算是一个比较常见的需求.视频网站改变帧率主要是为了向不同级别的网站用户提供差异化服务:电视厂商则是以提供更好的显示效果作为电视的卖点:对 ...
- bugku web 头等舱
什么也没有. 不行,他肯定把重要的东西隐藏了起来,首先查看源代码 真的什么也没有 burp抓包,看是不是在头部里,嘿嘿找到了
- bean属性复制到另外一个bean
import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(maker.getBaseInfo(), newBasInfo ...
- [NOI 2018] 归程
Description 传送门 Solution 65分做法 先求出每个点到\(1\)号点的最短路,记为\(d[i]\).然后按照海拔从大到小依次加边,并查集维护每个连通块中\(d[i]\)的最小值, ...
- php中的md5()的安全问题
汇总下php中md5()的安全问题 安全问题1: 1.x=任意字符串 md5('x')=0e*** 2.y=任意字符串 md5('y')=0e*** 如果x==y,php会返回true,在有些时候 ...
- Django基础(路由、视图、模板)
目录导航 Django 路由控制 Django 视图层 Django 模版层 Django 路由控制 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用 ...
- LCA Binary Lifting 倍增
留坑 待填 一篇不错的CF博客 这篇纯讲理论的,比较清楚. 去CF上搜Gym algorithm 可以看到很多算法文章.
- 分布式锁与实现(一)——基于Redis实现 【比较靠谱】
转: 分布式锁与实现(一)——基于Redis实现 概述 目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题.分布式的CAP理论告诉我们“任何一个分布式系统 ...
- Day050--jQuery表单事件 轮播图 插件库 ajax
表单控件的事件 change()表单元素发生改变时触发事件 select()文本元素发生改变时触发事件 submit()表单元素发生改变时触发事件 .focus() 获取焦点 .blur() 释放焦点 ...
- Matrix-tree 定理的一些整理
\(Matrix-tree\) 定理用来解决一类生成树计数问题,以下前置知识内容均是先基于无向无权图来介绍的.有关代数余子式的部分不是很明白,如果有错误还请指出-- 部分内容参考至:\(Blog\_1 ...