hdu2363 枚举最短路
(1) 二分
把所有的高度都拿过来,组合起来,sort一遍,然后二分,找到能连通的最小的那个,但这里存在一起情况,就是遇到高度差相等的时候会bug....
(2) 枚举 连通直接break
把所有的高度都拿过来,组合起来,soet一遍,然后暴力枚举上下限制,能连通直接break;这个显然是错的,直接break的话只能保证高度差最小,不能保证路径最短..
(3) 枚举 连通并且高度变化的时候 break;就是在(2)的基础上不直接break,如果第一次找到能连接1,n的路径直接记录当前高度差,然后一直往后跑到高度差不等于第一次连通的高度差的时候break;这样做肯定是对的,但是时间复杂度我感觉过不去....
(4) 写到第三部我突然想到一个自己感觉正确的方法,因为手懒就不写那个代码了,直接说思路,就是hash + 二分,我们枚举出所有范围组合的后排序,排序后吧所有高度差相同的hash成一个点,每次如果这个点中的某一个点使其连通了,那么这个点就是可行点(如果多个都满足记得保留最优),直接mid = up = mid - 1.......,感觉这样应该会好点..虽然没有去实现,感觉会优化很多时间吧...
下面是(3)的代码,虽然ac了,但自认为会TLE..
#include<stdio.h> #include<string.h> #include<queue> #include<algorithm>#define N_node 100 + 20 #define N_edge 10000 + 500 #define INF 2000000000 using namespace std;typedef struct {int to ,next ,cost; }STAR;typedef struct {int low ,up ,d; }HHH;STAR E[N_edge]; HHH DH[100*100+100]; int list[N_node] ,tot; int s_x[N_node]; int H[N_node];void add(int a, int b ,int c) {E[++tot].to = b;E[tot].cost = c;E[tot].next = list[a];list[a] = tot; }bool camp(HHH a ,HHH b) {return a.d < b.d; }int abss(int x) {return x > 0 ? x : -x; }void SPFA(int s ,int n ,int low ,int up) {for(int i = 0 ;i <= n ;i ++)s_x[i] = INF;int mark[N_node] = {0};s_x[s] = 0;mark[s] = 1;queue<int>q;q.push(s);while(!q.empty()){int tou ,xin;tou = q.front();q.pop();mark[tou] = 0;for(int k = list[tou] ;k ;k = E[k].next){xin = E[k].to;if(H[xin] < low || H[xin] > up) continue;if(s_x[xin] > s_x[tou] + E[k].cost){s_x[xin] = s_x[tou] + E[k].cost;if(!mark[xin]){mark[xin] = 1;q.push(xin);}}}}return ; }int main () {int t ,i ,j ,n ,m;int a ,b ,c;scanf("%d" ,&t);while(t--){scanf("%d %d" ,&n ,&m);for(i = 1 ;i <= n ;i ++)scanf("%d" ,&H[i]);memset(list ,0 ,sizeof(list));tot = 1;for(i = 1 ;i <= m ;i ++){scanf("%d %d %d" ,&a ,&b ,&c);add(a,b,c);add(b,a,c);}int tmp = 0;for(i = 1 ;i <= n ;i ++)for(j = i + 1 ;j <= n ;j ++){int low = H[i] < H[j] ? H[i] : H[j];int up = H[i] > H[j] ? H[i] : H[j];DH[++tmp].low = low;DH[tmp].up = up;DH[tmp].d = up - low;} sort(DH + 1 ,DH + tmp + 1,camp);int minc = INF,minz = 0;for(i = 1 ;i <= tmp ;i ++){if(H[1] < DH[i].low || H[1] > DH[i].up) continue;if(H[n] < DH[i].low || H[n] > DH[i].up) continue;SPFA(1 ,n ,DH[i].low ,DH[i].up);if(s_x[n] == INF) continue;if(minc == INF){minc = DH[i].d;minz = s_x[n];}else{if(minc != DH[i].d) break;if(s_x[n] < minz)minz = s_x[n];} } if(n == 1) printf("0 0\n");else printf("%d %d\n" ,minc ,minz);}return 0; }
hdu2363 枚举最短路相关推荐
- Uva 11374 - Airport Express(枚举+最短路)
题目链接 https://vjudge.net/problem/UVA-11374 [题意] 市民从市区去机场要走机场快线,机场快线分为经济线和商业线两种,你只有一张商业线车票,只能坐一站商业线,其它 ...
- 【洛谷P1186】玛丽卡(断边+最短路)
传送门 这个题意描述的狗屁不通...其实大概就是 1-n有m条边但m条边中可能会有一条边无法通过求出时间t,保证时间t内无论哪条路无法通过,都能满足有一条从1-n路径总时间小于或等于t的最短路 然后思 ...
- 【HDOJ图论题集】【转】
1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...
- 一系列图论问题[转]
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 1595 hdu find the longest of the shortest
题目地址: 题解:题目意思为从起点到终点的最短路中有一条路不能通过了,求到从起点到终点的最短距离. 可以先找出从起点到终点的最短距离,并将路径保存下来,然后枚举最短路径中的所有路径,求 出从起点到终点 ...
- P2176 [USACO14FEB]路障Roadblock
题目描述 每天早晨,FJ从家中穿过农场走到牛棚.农场由 N 块农田组成,农田通过 M 条双向道路连接,每条路有一定长度.FJ 的房子在 1 号田,牛棚在 N 号田.没有两块田被多条道路连接,以适当的路 ...
- usaco题思考记录
1. 修理牛棚 Barn Repair 思路:反向,枚举所有间隔,从大到小排序,依次+板子不填它,直到板子数够了为止,拿总长去减::: 结论:逆向思维. 2.丢失的牛 思路:BFS::: 结论:有后效 ...
- P5837 [USACO19DEC]Milk Pumping G
知识点:枚举,最短路 这个题的正解应该是枚举+最短路,枚举每个边的流量,然后求起点到终点的最短路,当然小于枚举的流量的边其实就是不连通的,这样这个题就做出来了,但是一开始我写的是深搜,加了剪枝,用邻接 ...
最新文章
- JavaScript 利用location对象实现跨页面传参
- 自然语言处理NLP之自然语言生成、文本相似性、看图说话、说话生图、语音合成、自然语言可视化
- 一.Python 基础
- linux 设置系统时间
- 安卓勒索软件进一步扩散
- DMURLConnection
- Android 事件分发机制
- PHP两个匿名函数传递性,PHP让人不知道的匿名函数的几种写法(附代码)
- static_cast,reinterpret_cast,const_cast,dynamic_cast:
- 代写R语言assignment经常用到的代码语法分享!
- 计算机组装课上机课干什么,多媒体技术与《计算机组装与维护》课的精彩结合:组装一台多媒体计算机需要哪些部件...
- 浅谈互联网那些防不胜防的人肉搜索技巧
- 客户数据中台(CDP): 当代数字化营销顶梁柱
- jenkins下载插件下载不了,解决办法
- Centos7云服务器部署SpringBoot项目(手动配置环境篇)
- 伺服阀放大器|通用型电液伺服阀放大器|伺服阀放大器厂家
- Apache Beam构建流处理任务
- 基于多源大数据的武汉市区域空间格局研究
- android 脸部识别之3D,这两款安卓手机也支持3D结构光人脸识别
- 现在的微博营销方案具备哪些特点呢?