(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 枚举最短路相关推荐

  1. Uva 11374 - Airport Express(枚举+最短路)

    题目链接 https://vjudge.net/problem/UVA-11374 [题意] 市民从市区去机场要走机场快线,机场快线分为经济线和商业线两种,你只有一张商业线车票,只能坐一站商业线,其它 ...

  2. 【洛谷P1186】玛丽卡(断边+最短路)

    传送门 这个题意描述的狗屁不通...其实大概就是 1-n有m条边但m条边中可能会有一条边无法通过求出时间t,保证时间t内无论哪条路无法通过,都能满足有一条从1-n路径总时间小于或等于t的最短路 然后思 ...

  3. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  4. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  5. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  6. 1595 hdu find the longest of the shortest

    题目地址: 题解:题目意思为从起点到终点的最短路中有一条路不能通过了,求到从起点到终点的最短距离. 可以先找出从起点到终点的最短距离,并将路径保存下来,然后枚举最短路径中的所有路径,求 出从起点到终点 ...

  7. P2176 [USACO14FEB]路障Roadblock

    题目描述 每天早晨,FJ从家中穿过农场走到牛棚.农场由 N 块农田组成,农田通过 M 条双向道路连接,每条路有一定长度.FJ 的房子在 1 号田,牛棚在 N 号田.没有两块田被多条道路连接,以适当的路 ...

  8. usaco题思考记录

    1. 修理牛棚 Barn Repair 思路:反向,枚举所有间隔,从大到小排序,依次+板子不填它,直到板子数够了为止,拿总长去减::: 结论:逆向思维. 2.丢失的牛 思路:BFS::: 结论:有后效 ...

  9. P5837 [USACO19DEC]Milk Pumping G

    知识点:枚举,最短路 这个题的正解应该是枚举+最短路,枚举每个边的流量,然后求起点到终点的最短路,当然小于枚举的流量的边其实就是不连通的,这样这个题就做出来了,但是一开始我写的是深搜,加了剪枝,用邻接 ...

最新文章

  1. JavaScript 利用location对象实现跨页面传参
  2. 自然语言处理NLP之自然语言生成、文本相似性、看图说话、说话生图、语音合成、自然语言可视化
  3. 一.Python 基础
  4. linux 设置系统时间
  5. 安卓勒索软件进一步扩散
  6. DMURLConnection
  7. Android 事件分发机制
  8. PHP两个匿名函数传递性,PHP让人不知道的匿名函数的几种写法(附代码)
  9. static_cast,reinterpret_cast,const_cast,dynamic_cast:
  10. 代写R语言assignment经常用到的代码语法分享!
  11. 计算机组装课上机课干什么,多媒体技术与《计算机组装与维护》课的精彩结合:组装一台多媒体计算机需要哪些部件...
  12. 浅谈互联网那些防不胜防的人肉搜索技巧
  13. 客户数据中台(CDP): 当代数字化营销顶梁柱
  14. jenkins下载插件下载不了,解决办法
  15. Centos7云服务器部署SpringBoot项目(手动配置环境篇)
  16. 伺服阀放大器|通用型电液伺服阀放大器|伺服阀放大器厂家
  17. Apache Beam构建流处理任务
  18. 基于多源大数据的武汉市区域空间格局研究
  19. android 脸部识别之3D,这两款安卓手机也支持3D结构光人脸识别
  20. 现在的微博营销方案具备哪些特点呢?

热门文章

  1. 数据分析行业需要具备哪些技术 如何快速进入
  2. JAVA 实现扫码二维码登录
  3. 5个强大的Java分布式缓存框架推荐
  4. CSS的单位及css3的calc()及line-height百分比
  5. POJ 1184 聪明的打字员
  6. Zabbix配置详解
  7. JavaScript对象理解
  8. Cisco和H3C的两种不同动态***解决方案
  9. DPM 2007升级到SP1的方法
  10. Oracle配置方面问题收集