HDU1839(最短路+二分)
来源:互联网 发布:美孚一号5w40数据 编辑:程序博客网 时间:2024/05/18 03:04
在最大高度下求最短路径,我们将高度排序,然后二分高度就行,因为节点比较多用邻接表存储
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int INF = 0x7fffffff;const int VN = 10005;const int EN = 500005;struct Edge{ int v,next,cap,time;} E[EN];int n, m, t;int size;int head[VN];int cap[EN];int d[VN];int Time[VN];int limit;bool inq[VN];void init(){ size=0; memset(head, -1, sizeof(head));}void addEdge(int u,int v,int c,int d){ E[size].v=v; E[size].cap=c; E[size].time=d; E[size].next = head[u]; head[u] = size++;}int Dijkstra(int src){ fill(d,d+n+1,INF); d[src] = 0; queue<int>q; q.push(src); while(!q.empty()) { int u = q.front(); q.pop(); for(int e=head[u]; e!=-1; e=E[e].next) { if(E[e].cap>=limit) { int tmp = d[u]+E[e].time; if(d[E[e].v] > tmp) { d[E[e].v] = tmp; q.push(E[e].v); } } } } return d[n];}int main(){ int T, u, v, c, d; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&m,&t); init(); for(int i=0; i<m; ++i) { scanf("%d%d%d%d",&u,&v,&c,&d); cap[i]=c; addEdge(u,v,c,d); addEdge(v,u,c,d); } sort(cap, cap+m); // 二分求解 int left=0, right=m-1, mid; int ans = cap[0]; while(left <= right) { mid = (left+right)>>1; limit = cap[mid]; int tmp=Dijkstra(1); if(tmp==INF || tmp>t) { right = mid - 1; } else { ans = cap[mid], left = mid + 1; } } printf("%d\n", ans); } return 0;}
0 0
- hdu1839 二分+最短路
- hdu1839 二分最短路
- HDU1839(最短路+二分)
- hdu1839 spfa+二分查找
- csu1307 (最短路+二分)
- hdu2962(最短路+二分)
- hdu2962Trucking 二分+最短路
- hdu2363Cycling 二分+最短路
- bzoj1614(最短路+二分)
- 最短路 + 二分答案
- POJ3662 二分+最短路
- HDU1839
- HDU1839
- POJ3621-平均最短路,二分
- 【二分\最短路】架设电话线
- hdu2962之二分+最短路
- sgu240:Runaway(二分+最短路)
- poj 3662 二分+最短路
- cocos2dx的坑 ---- autorelease不release
- html文本框提示文字设置
- HDU1690(Floyd最短路)
- HDU 1002 A + B Problem II(两个大数相加)
- 深入理解java同步、锁机制
- HDU1839(最短路+二分)
- 伪分布式hadoop安装的几个问题
- android广播
- 使用Xcode系统symbolicatecreash解析崩溃日志
- 总线设备驱动模型篇一
- unity3d研究之 角色换装
- 什么是封装?
- css三栏布局,中间自适应
- 浅谈 CSS 中的伪类 after