最小生成树模板题 P1692
Description
给出N个顶点、E条边的连通无向简单图,请你完成下列任务: 任务1、求边权和最小的生成树(最小生成树) 任务2、求边权和最大的生成树(最大生成树) 任务3、求最大边最小的生成树(瓶颈生成树) 任务4、求最小边最大的生成树(瓶颈生成树)
Input
第一行:两个整数N,E(N<=50000,E<=100000),分别表示有N个新岛,E对能直接用电缆连接的岛屿,其中主岛为1。接下来M行:每行三个数u,v,w,1<=u,v<=N,表示岛屿u和v之间可以直接用电缆连接,距离为w(<=100000)。
Output
第一行一个整数,表示最小生成树的边权和;第二行一个整数,表示最大生成树的边权和;第三行一个整数,表示最大边最小的生成树中,最大边的权值;第四行一个整数,表示最小边最大的生成树中,最小边的权值;
Hint
N<=50000,E<=100000
Solution
注意事项: 1.这个就像有向图那么存就可以了不然排序可能有边排不到,不然用2*m应该也行吧。 2.循环注意=号。 3.并查集的union修改的是父亲的值,如果只修改x,y的值父亲的值就没有被修改到。 4.应该是要用long long的只不过数据太弱了。
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 100005
#define inf 0x3f3f3f3f
using namespace std;
struct Edge{int u;int v;int w;int next;friend bool operator < (Edge a,Edge b){return a.w<b.w;}
}edge[maxn];
int first[maxn],last[maxn],FA[maxn];
int node,n,m,x,y,z,cnt;
int ans1,ans2,ans3,ans4;
void addedge(int u,int v,int w){edge[++node]=(Edge){u,v,w,0};if(first[u]==0)first[u]=node;else edge[last[u]].next=node;last[u]=node;
}
void init(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&z);addedge(x,y,z);}for(int i=1;i<=n;i++){FA[i]=i;}
}
int dofind(int x){if(FA[x]==x)return x;return FA[x]=dofind(FA[x]);
}
void dounion(int x,int y){int dx=dofind(x),dy=dofind(y);if(dx!=dy){FA[dx]=FA[dy];}
}
bool dofinD(int x,int y){int dx=dofind(x),dy=dofind(y);return dx==dy;
}
void kruskal(){sort(edge+1,edge+m+1);for(int i=1;i<=m;i++){int a=edge[i].u,b=edge[i].v;if(dofinD(a,b))continue;dounion(a,b);ans1+=edge[i].w;ans2=edge[i].w;cnt++;if(cnt==n-1)break;}cnt=0;for(int i=1;i<=n;i++){FA[i]=i;}for(int i=m;i>=1;i--){int a=edge[i].u,b=edge[i].v;if(dofinD(a,b))continue;dounion(a,b);ans3+=edge[i].w;ans4=edge[i].w;cnt++;if(cnt==n-1)break;}
}
int main(){init();kruskal();printf("%d\n%d\n%d\n%d\n",ans1,ans3,ans2,ans4);return 0;
}
转载于:https://www.cnblogs.com/virtual-north-Illya/p/10045223.html
最小生成树模板题 P1692相关推荐
- 最小生成树(模板题:最优布线问题,繁忙的都市,联络员)(C++)
文章目录 序言 正文 First Promble 最优布线问题 时间限制: 1000 m s 1000 ms 1000ms 空间限制: 262144 K B 262144 KB 262144KB 题目 ...
- 天空之城(最小生成树模板题)
题目描述 **链接:https://ac.nowcoder.com/acm/contest/9986/J 来源:牛客网 天空之城有5个小镇,名字分别为Ada, Aed, Akk, Orz, Apq,他 ...
- POJ3164 最小树形图 有向图的最小生成树 模板题 朱刘算法 朱永津-刘振宏算法
Command Network Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 12833 Accepted: 3717 ...
- 一起开心2020暑假训练第二周 图论(模板题)
比赛链接: 文章目录 A HDU 1285 一 B HDU 1863 起 C POJ 2387 开 D POJ 1502 心 E HDU 5922 图 F HDU 2112 论 A HDU 1285 ...
- kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题)
kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题) 总题单 week 3 [kuangbin带你飞] 题单 最小生成树 + 线段树 Cli ...
- 【HDU - 1102】Constructing Roads (最小生成树裸题模板)
题干: There are N villages, which are numbered from 1 to N, and you should build some roads such that ...
- CSP认证201412-4 最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树
题目分析 来源:acwing 分析:这是一道最小生成树的裸题. 这里默写Kruskal求最小生成树的最小费用的模板. 最小生成树模板请参考笔者的另一篇博文: 最小生成树板子-AcWing 859. K ...
- POj 3164 Command Network最小树形图 模板题 朱刘算法
Command Network After a long lasting war on words, a war on arms finally breaks out between littleke ...
- 1488:新的开始(Primt模板题)
1488:新的开始 时间限制: 1000 ms 内存限制: 65536 KB [题目描述] 发展采矿业当然首先得有矿井,小 FF 花了上次探险获得的千分之一的财富请人在岛上挖了 n 口矿井,但他似乎忘 ...
最新文章
- 当文员学计算机二级,二本学生毕业后在干什么?多半做3种工作,过来人深有同感...
- java读取欧姆龙plc_欧姆龙CJ2M系列PLC与PLC之间的数据相互读取设定
- boost::math::statistics相关用法的测试程序
- 【转】spin_lock、spin_lock_irq、spin_lock_irqsave区别
- XML和JSON的比较
- Power BI Desktop中的分解树
- 如何拷贝工程_如何获得微信小游戏跳一跳源码以及源代码组合包括哪些
- c语言读grd文件,基于GDAL库,读取.grd文件(以海洋地形数据为例)C++版
- 主流移动开发平台架构分析
- python自然语言分析--倚天屠龙记人物关系、词云、柱状图、-词频
- “武大樱花绽放视频”动手实操教程--Python
- java response.write_response.write()区别response.getWrite().write()
- 区块链学习笔记(2)难度整定,区块形成,区块体,Merkle树,Merkle Proof默克尔证明
- 微信小程序API-设备- 网络状态
- 电视剧植入式广告的植入方式有哪些
- [Unity][ILRuntime][C#]热更新运行官方示例U3D项目报错
- 魔兽地图编辑器插件YDWE的使用与基本设置3之地形面板、装饰物面板、单位面板、区域面板、镜头面板
- 深度学习服务器怎么选?哪个更划算?
- DNS的正向解析,反向解析以及双向解析
- Ubuntu18.04设置连接网络,使虚拟机下的Ubuntu18.04可以上网