POJ-3662 Telephone Lines---二分+最短路+最小化第k+1大
题目链接:
https://cn.vjudge.net/problem/POJ-3662
题目大意:
求一条路径从1到n使第k+1大的边最小。
解题思路:
二分答案mid,当原边权小于等于mid新边权为0,否则新边权为1.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define MID(l, r) (l + (r - l) / 2)
#define lson(o) (o * 2)
#define rson(o) (o * 2 + 1)
using namespace std;
typedef long long ll;
const int INF = 1e9 +;
const int maxn = 1e6 + ;
int n, m, k;
struct edge{
int u, v, w;
edge(int u, int v, int w):u(u), v(v), w(w){}
edge(){}
};
struct Heapnode
{
int d, u;
Heapnode(){}
Heapnode(int d, int u):d(d), u(u){}
bool operator <(const Heapnode & a)const
{
return d > a.d;
}
};
bool v[maxn];
int d[maxn]; int dijkstra(int s, int t, vector<edge>edges, vector<int>G[])
{
priority_queue<Heapnode>q;
for(int i = ; i <= n; i++)d[i] = INF;
d[s] = ;
memset(v, , sizeof(v));
q.push(Heapnode(, s));
while(!q.empty())
{
Heapnode now = q.top();
q.pop();
int u = now.u;
if(v[u])continue;
v[u] = ;
for(int i = ; i < G[u].size(); i++)
{
edge& e = edges[G[u][i]];
int v = e.v;
if(d[v] > d[u] + e.w)
{
d[v] = d[u] + e.w;
q.push(Heapnode(d[v], v));
}
}
}
return d[t];
} vector<edge>edges;
vector<int>G[maxn];
vector<edge>edges2;
void addedge(int u, int v, int w)
{
edges.push_back(edge(u, v, w));
int m = edges.size();
G[u].push_back(m - );
}
void init(int mid)
{
edges2.clear();
for(int i = ; i < edges.size(); i++)
{
edge& e = edges[i];
if(e.w <= mid)
{
edges2.push_back(edge(e.u, e.v, ));
}
else
{
edges2.push_back(edge(e.u, e.v, ));
}
}
}
int main()
{
scanf("%d%d%d", &n, &m, &k);
int l = , r = , u, v, w;
while(m--)
{
scanf("%d%d%d", &u, &v, &w);
addedge(u, v, w);
addedge(v, u, w);
r = max(r, w);
}
int ans = -;
while(l <= r)//l最开始要设置成0,不能设置成最小边,因为第k大可能为0
{
int mid = (l + r) / ;
init(mid);
int t = dijkstra(, n, edges2, G);
//cout<<mid<<" "<<t<<endl;
if(t <= k)
{
ans = mid;
r = mid - ;
}
else
{
l = mid + ;
}
}
cout<<ans<<endl;
return ;
}
POJ-3662 Telephone Lines---二分+最短路+最小化第k+1大的更多相关文章
- POJ 3662 Telephone Lines(二分+最短路)
查看题目 最小化第K大值. 让我怀疑人生的一题目,我有这么笨? #include <cstdio> #include <queue> #include <cstring& ...
- poj 3662 Telephone Lines(最短路+二分)
Telephone Lines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6973 Accepted: 2554 D ...
- POJ 3662 Telephone Lines (二分+Dijkstra: 最小化第k大的值)
题意 Farmer John想从电话公司修一些电缆连接到他农场.已知N个电线杆编号为1,2,⋯N,其中1号已经连接电话公司,N号为农场,有P对电线杆可连接. 现给出P对电线杆距离Ai,Bi,Li表示A ...
- POJ 3662 Telephone Lines (二分+dijkstra)
题意: 多年以后,笨笨长大了,成为了电话线布置师.由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人. 该市周围分布着N(1<=N<=1000)根据1……n顺序编号的废弃的电话 ...
- (poj 3662) Telephone Lines 最短路+二分
题目链接:http://poj.org/problem?id=3662 Telephone Lines Time Limit: 1000MS Memory Limit: 65536K Total ...
- poj 3662 Telephone Lines dijkstra+二分搜索
Telephone Lines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5696 Accepted: 2071 D ...
- POJ 3662 Telephone Lines【Dijkstra最短路+二分求解】
Telephone Lines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7214 Accepted: 2638 D ...
- poj 3662 Telephone Lines
Telephone Lines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7115 Accepted: 2603 D ...
- poj 3662 Telephone Lines spfa算法灵活运用
意甲冠军: 到n节点无向图,它要求从一个线1至n路径.你可以让他们在k无条,的最大值.如今要求花费的最小值. 思路: 这道题能够首先想到二分枚举路径上的最大值,我认为用spfa更简洁一些.spfa的本 ...
随机推荐
- 手把手教你使用 VuePress 搭建个人博客
手把手教你使用 VuePress 搭建个人博客 有阅读障碍的同学,可以跳过第一至四节,下载我写好的工具包: git clone https://github.com/zhangyunchencc/vu ...
- 如何在 Azure 中创建 ASP.NET Web 应用
Azure Web 应用提供高度可缩放.自修补的 Web 托管服务. 本快速入门演示如何将第一个 ASP.NET Web 应用部署到 Azure Web 应用中. 完成后,便拥有了一个资源组,该资源组 ...
- 961 -尺寸2N阵列中的N重复元素
在一个A大小的数组中2N,有N+1独特的元素,这些元素中的一个重复N次. 返回重复N次的元素. 例1: 输入:[1,2,3,3] 输出:3 例2: 输入:[2,1,2,5,3,2] 输出:2 例3: ...
- g2o error
/home/lzp/slamtest/graduationcode/p3/poseestimation/pose_estimation_3d2d.cpp: In function ‘void bund ...
- Java中URL重写(urlrewrite+Maven)
一.UrlRewrite的作用 UrlRewrite即地址重写,用户得到的全部都是经过处理后的URL地址.将我们的动态网页地址转化为静态的地址,如html.shtml,还可以隐藏网页的真正路径.此 ...
- JMM和底层实现原理
- C#操作xml文件:使用XmlDocument 实现读取和写入
XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖于内 ...
- golang rpc 简单范例
RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 它的工作流程如下图: go ...
- Fill Table Row(it’s an IQ test question)
Here is a table include the 2 rows. And the cells in the first row have been filled with 0~4. Now yo ...
- frameset 在 Google Chrome 中无法隐藏左边栏解决方法!
使用Frameset 框架,发现在IE下, <frameset name="mainDefine" cols="200,10,*" frameborder ...