POJ3662 Telephone Lines [二分 最短路]
来源:互联网 发布:阿里云 腾讯云哪个好 编辑:程序博客网 时间:2024/05/16 04:31
题意:
题目描述得挺隐晦。但是本质就一句话:求一条"最短路":第k+1大的边最小的"最短路"。
思路:
二分加最短路判定。
最答案进行二分。然后按照二分的值用0,1处理整个图:
将比二分值大的边都置为1,将比二分值小的边都置位0。然后进行找1到n的最短路,如果值小于K,则这个二分值满足题意。
再继续二分,直到找到最优解。
#include<iostream>#include<vector>#include<string>#include<queue>#include<algorithm>#define llong long long#define Min(a,b) (a<b?a:b)#define Max(a,b) (a>b?a:b)#define Abs(a) ((a)>0?(a):-(a))#define Mod(a,b) (((a)-1+(b))%(b)+1)using namespace std;const int N=1005;const int M=10005;const int inf=1e10;int n,m,K,k;int data[M][3];struct {int v,next,w;}edge[M<<1];int edgehead[N];bool vis[N];int d[N];void addedge(int u,int v,int w){edge[k].v=v;edge[k].w=w;edge[k].next=edgehead[u];edgehead[u]=k++;}bool OK(int value){queue<int> que;k=1;memset(edgehead,0,sizeof(edgehead));memset(edge,0,sizeof(edge));memset(vis,0,sizeof(vis));for(int i=1;i<=m;i++){if(data[i][2]<=value){addedge(data[i][0],data[i][1],0);addedge(data[i][1],data[i][0],0);}else{addedge(data[i][0],data[i][1],1);addedge(data[i][1],data[i][0],1);}}for(int i=1;i<=n;i++)d[i]=inf;que.push(1);vis[1]=true;d[1]=0;while(!que.empty()){int now=que.front();que.pop();vis[now]=false;for(int i=edgehead[now];i;i=edge[i].next){int v=edge[i].v;int w=edge[i].w;if(d[v]>d[now]+w){d[v]=d[now]+w;if(!vis[v]){que.push(v);}}}}if(d[n]<=K)return true;elsereturn false;}int main(){scanf("%d%d%d",&n,&m,&K);int l,r,rr=0,mid;for(int i=1;i<=m;i++){scanf("%d%d%d",data[i],data[i]+1,data[i]+2);rr=max(rr,data[i][2]);}l=0,r=rr+1;while(l<r){mid=(l+r)>>1;if(OK(mid)){r=mid;}else{l=mid+1;}}if(l<=rr)printf("%d\n",l);elseprintf("-1\n");return 0;}
- POJ3662 Telephone Lines 二分+最短路
- POJ3662 Telephone Lines [二分 最短路]
- POJ3662 Telephone Lines 二分+最短路
- Poj3662 Telephone Lines (限制最短路)
- POJ - 3662 Telephone Lines (二分 + 最短路)
- POJ3662 二分+最短路
- POJ3662--Telephone Lines
- POJ3662-Telephone Lines
- POJ3662-Telephone Lines
- poj3662 Telephone Lines
- Poj3662 Usaco2008JanSilver Telephone Lines
- Poj 3662 Telephone Lines(最短路+二分)
- *【bzoj 1614】Telephone Lines架设电话线(二分+最短路)
- poj3662,二分 + 最短路,好题啊
- BZOJ 1614: [Usaco2007 Jan]Telephone Lines架设电话线 二分答案 最短路
- bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线 二分+最短路
- POJ3662,洛谷1948 [USACO08JAN]电话线Telephone Lines
- POJ Telephone Lines 二分+dijkstra
- Symbian Listbox with CheckBox(复选框) 构建 (转)
- jQuery Ajax 实例 全解析
- 利用php以及dojo,完成文件上传
- Silverlight 在MVVM中同步UI的SelectedItems和DataContext
- QString 与其它类的互转
- POJ3662 Telephone Lines [二分 最短路]
- 了解java
- Android入门学习_代码常用布局
- 为UIKeyboardTypeNumberPad增加自定义按键
- 位操作符的一些实用方法介绍
- 利用javascript是表单隔行换颜色
- log4j配置操作
- Eclipse+CDT 头文件无法解析的问题(Ubuntu 11.10,Eclipse 3.7)
- Uploading File with PHP and Client Side Scripting