HDU1598最小生成树+贪心处理
题意:给n个点,m条边,和每条边的权值,求从s点到e点 路径 权差 的最小值,即边权值最大的减去最小的。
原始最小生成树可以做的:求连接图所有节点 的最小权值和。
kruskal算法使用的结构:并查集,对边权排序。
kruskal算法的实现过程:
1:输入边,权
2:对权 从小到大 排序
3:按权值 从小到大考虑 ,
是否可以连接这条边(成环则不可连,不成环可连)
判断成环与否和连接 环的操作使用并查集实现 :
若该边的两个节点都在同一个并查集枝上,则成环
连接 就是用并查集连接
就本题来说:
目的:求从s点到e点 路径 权差 的最小值
kruskal算法的操作:按权值从小到大连边,那么s和e连接完毕时的边权时最大的权,起始的边权时最小的,起始边权从所有边权最小开始
在可以连通s和e的前提下, 第一个连接的边权 应尽量 大 , 最后连接的边权尽量 小
判断s和e连通的标志: 它们的老大是同一人
关键代码:
void ckruskal()
{fin=1e9;for(int i=0;i<m;i++){for(int j=0;j<205;j++) pre[j]=j;k=m-1;flag=0;for(int j=i;j<m;j++){int r=f(e[j].u) ,t=f(e[j].v);if(r!=t) pre[r]=t;if(f(s)==f(en)){k=j; flag=1; break;}}if(!flag) break;fin=min(e[k].w-e[i].w,fin);}
}
完整代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 struct edge 5 { 6 int u,v,w; 7 }e[1005]; 8 int n,m,q,k,s,en,fin,pre[205]; 9 bool flag; 10 bool cmp(edge a,edge b){return a.w<b.w;} 11 12 void input() 13 { 14 for(int i=0;i<m;i++) 15 scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w); 16 sort(e,e+m,cmp); 17 } 18 19 int f(int x){return x==pre[x]?x:pre[x]=f(pre[x]);} 20 21 void ckruskal() 22 { 23 fin=1e9; 24 25 for(int i=0;i<m;i++) 26 { 27 for(int j=0;j<205;j++) pre[j]=j; 28 k=m-1;flag=0; 29 for(int j=i;j<m;j++){ 30 31 int r=f(e[j].u) ,t=f(e[j].v); 32 if(r!=t) pre[r]=t; 33 if(f(s)==f(en)){k=j; flag=1; break;} 34 } 35 if(!flag) break; 36 fin=min(e[k].w-e[i].w,fin); 37 } 38 } 39 int main() 40 { 41 while(scanf("%d%d",&n,&m)!=EOF) 42 { 43 input(); 44 cin>>q; 45 while(q--) 46 { 47 scanf("%d%d",&s,&en); 48 ckruskal(); 49 if(fin!=1e9)printf("%d\n",fin); 50 else printf("-1\n"); 51 } 52 53 } 54 return 0; 55 }
View Code
转载于:https://www.cnblogs.com/star-and-me/p/6715436.html
HDU1598最小生成树+贪心处理相关推荐
- jzoj3410-[GDOI2014模拟]Tree【最小生成树,贪心】
正题 题目大意 在一张图中选择一颗生成树使得边权的方差最小. 解题思路 我们很容易想到一种贪心,那就是在按照边权排好序后选择一段连续的区间然后使用这段区间构成最小生成树,这样时间复杂度是O(m3log ...
- NOJ1056地道——最小生成树+贪心算法
地道 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByte Total Submit:289 ...
- 【代码源 Div1 - 109】#454. Minimum Or Spanning Tree(最小生成树,边权按位或,贪心,并查集) CF1624G
problem solution 题意:生成树的代价为他所有边的边权按位或得到的值,求最小生成树 贪心,一般来说,求 按位与 和 按位或 的最大值都可以从高往低逐位的贪心处理 对于当前位 b 而言,若 ...
- java 最小生成树_图的最小生成树(java实现)
1.图的最小生成树(贪心算法) 我两个算法的输出都是数组表示的,当前的索引值和当前索引对应的数据就是通路,比如parent[2] = 5;即2和5之间有一个通路,第二个可能比较好理解,第一个有点混乱 ...
- c+和python哪个快-python比c更快
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python的优点是代码可重用性高和开发速度快,但是时间和内存的使用不如c++. ...
- 欢乐纪中A组赛【2019.8.23】
前言 我好菜 成绩 %%%TRXdalao\%\%\% TRXdalao%%%TRXdalao RankRankRank PersonPersonPerson ScoreScoreScore AAA ...
- pythonocc_pythonocc
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我有一个关于如何在pythonocc中使用样条的问题. 首先,我知道我可以用 a ...
- 《算法》(第四版)------------图
<算法>(第四版)------------图 最小生成树 概念 最小生成树:含有图中所有顶点的 无环 连通 子图. 切分:将图所有顶点氛围两个非空且不重叠的两个集合.横切边是一条连接两个属 ...
- ACM比赛经验、刷题记录及模板库总结(更新中)
前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...
最新文章
- 重学《动手学深度学习》转
- ecshop文章增加点击次数插件
- python常用命令大全-Python pip 常用命令汇总
- convexHull函数
- Windows server 2003 体系结构
- DHL:jQuery框架学习使用总结,插件,继续中...
- python 获取浏览器句柄下的网页控件,Python获取浏览器窗口句柄过程解析
- FWT快速沃尔什变换
- 判断画布是否是图元格式画布
- 16家上市银行股票代码
- Arduino 入门教程(十五) WS2811跑马灯
- Java毕业设计-资产管理系统
- sql server 代理权限问题
- [javaSE] 基本类型(String相关)
- [OpenGL] 几何着色器
- 【Linux】Alibaba Cloud Linux 3 中第二硬盘、MySQL8.*、MySQL7.*、Redis、Nginx、Java 系统安装
- 华中科技大学计算机科学与技术排名,2017华中科技大学专业排名
- Win32病毒入门--ring3篇
- SpringCloud实用篇01
- 理解redux-thunk