【最小瓶颈生成树】【最小生成树】【kruscal】bzoj1083 [SCOI2005]繁忙的都市

本意是求最小瓶颈生成树,但是我们可以证明:最小生成树也是最小瓶颈生成树(其实我不会)。数据范围很小,暴力kruscal即可。

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 struct Edge{int u,v,w;void Read(){scanf("%d%d%d",&u,&v,&w);}}edges[10001];
 5 bool operator < (const Edge &a,const Edge &b){return a.w<b.w;}
 6 int n,m,fa[301],rank[301],tot;
 7 void init(){for(int i=1;i<=n;i++)fa[i]=i;}
 8 int findroot(int x)
 9 {
10     if(x==fa[x]) return x;
11     int rt=findroot(fa[x]);
12     fa[x]=rt;
13     return rt;
14 }
15 void Union(const int &U,const int &V)
16 {
17     if(rank[V]<rank[U]) fa[V]=U;
18     else
19       {
20           fa[U]=V;
21           if(rank[U]==rank[V]) ++rank[U];
22       }
23 }
24 int main()
25 {
26     scanf("%d%d",&n,&m); init();
27     for(int i=1;i<=m;++i) edges[i].Read();
28     sort(edges+1,edges+m+1);
29     for(int i=1;i<=m;i++)
30       {
31           int f1=findroot(edges[i].u),f2=findroot(edges[i].v);
32           if(f1!=f2)
33             {
34                 Union(f1,f2);
35                 tot++;
36                 if(tot==n-1)
37                   {
38                       printf("%d %d\n",n-1,edges[i].w);
39                       return 0;
40                   }
41             }
42       }
43     return 0;
44 }
时间: 2024-10-17 01:40:36

【最小瓶颈生成树】【最小生成树】【kruscal】bzoj1083 [SCOI2005]繁忙的都市的相关文章

bzoj1083: [SCOI2005]繁忙的都市(最小生成树)

1083: [SCOI2005]繁忙的都市 题目:传送门 题解: 一道大水题: 第一问明显输出n-1 第二问最小生成树 秒切 代码: 1 #include<cstdio> 2 #include<cstring> 3 #include<cstdlib> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 struct node 8 { 9 int x,y,c; 10 }a

BZOJ1083|SCOI2005繁忙的都市|最小生成树

Description城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连接.这些道路是双向的,且把所有的交叉路口直接或间接的连接起来了.每条道路都有一个分值,分值越小表示这个道路越繁忙,越需要进行改造.但是市政府的资金有限,市长希望进行改造的道路越少越好,于是他提出下面的要求: 1. 改造的那些道路能够把所有的交叉路口直接或间接的连通起来. 2. 在

[日常摸鱼]bzoj1083[SCOI2005]繁忙的都市-最小生成树

我也不知道为什么我要来写这个-怕是写水题写上瘾了(bu #include<cstdio> #include<algorithm> #define rep(i,n) for(register int i=1;i<=n;i++) const int N=10005; struct edge { int u,v,c; }e[N]; int n,m,mx,s[N],pre[N]; inline int find(int x){return pre[x]==x?x:find(pre[x

BZOJ1083: [SCOI2005]繁忙的都市

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1083 题目大意:城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道 路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连 接.这些道路是双向的,且把所有的交叉路口直接或间接的连接起来了.每条道路都有一个分值,分值越小表示这 个道路越繁忙,越需要进行改造.但是市政府的资金有限,市长希望进行改造的道

[BZOJ1083] [SCOI2005] 繁忙的都市 (kruskal)

Description 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连接.这些道路是双向的,且把所有的交叉路口直接或间接的连接起来了.每条道路都有一个分值,分值越小表示这个道路越繁忙,越需要进行改造.但是市政府的资金有限,市长希望进行改造的道路越少越好,于是他提出下面的要求: 1. 改造的那些道路能够把所有的交叉路口直接或间接的连通起来. 2.

BZOJ 1083: [SCOI2005]繁忙的都市【Kruscal最小生成树裸题】

1083: [SCOI2005]繁忙的都市 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2925  Solved: 1927[Submit][Status][Discuss] Description 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道 路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连 接.这些道路是双向的,且把所有的交叉路口直接或

(最小生成树/最小瓶颈生成树) 2017武汉现场赛 - Wifi Relay

题意: n个无线AP,有xy坐标属性,现在n个无线AP要桥接在一起不能断开连接,现在要求无线AP无线网络的覆盖半径最小是多少 分析: 看起来是像是最小生成树,这里是是求生成树中最长的边最短,就是最小瓶颈生成树. 可以证明最小瓶颈生成树就是最小生成树,详细看刘汝佳<算法入门经典训练指南>343页. 当时现场的时候,想试试最小生成树了,结果以为n方复杂度过不去,就没写,现在想起来,真是坑哦. 这题n有10000,所以不能直接建邻接矩阵,而是采用动态计算距离就行了. 比赛结束了随便一写就A了...

POJ 1861 ——Network——————【最小瓶颈生成树】

Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 15268   Accepted: 5987   Special Judge Description Andrew is working as system administrator and is planning to establish a new network in his company. There will be N hubs in the c

BZOJ 1083:[SCOI2005]繁忙的都市(最小生成树)

1083: [SCOI2005]繁忙的都市 Description 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连接.这些道路是双向的,且把所有的交叉路口直接或间接的连接起来了.每条道路都有一个分值,分值越小表示这个道路越繁忙,越需要进行改造.但是市政府的资金有限,市长希望进行改造的道路越少越好,于是他提出下面的要求: 1. 改造的那些道路能够把