描述


http://www.lydsy.com/JudgeOnline/problem.php?id=1614

分析


类似POJ_3662_Telephone_Lines_(二分+最短路)

Dijkstra:

 #include <bits/stdc++.h>
using namespace std; const int maxn=+,maxm=+,INF=<<;
int n,m,k,ect;
int hd[maxn],f[maxm],d[maxn];
bool vis[maxn];
struct edge{
int to,w,next;
edge(int to=,int w=,int next=):to(to),w(w),next(next){}
bool operator < (const edge &a) const { return w>a.w; }
}g[maxm<<];
inline int read(int &x){ x=;int k=;char c;for(c=getchar();c<''||c>'';c=getchar())if(c=='-')k=-;for(;c>=''&&c<='';c=getchar())x=x*+c-'';return x*=k; }
inline void add_edge(int u,int v,int w){
g[++ect]=edge(v,w,hd[u]); hd[u]=ect;
g[++ect]=edge(u,w,hd[v]); hd[v]=ect;
}
inline bool C(int x){
for(int i=;i<=n;i++) d[i]=INF, vis[i]=false;
d[]=;
priority_queue <edge> q;
q.push(edge(,,));
while(!q.empty()){
int u=q.top().to; q.pop();
if(vis[u]) continue;
vis[u]=true;
for(int i=hd[u];i;i=g[i].next){
int v=g[i].to,duv=g[i].w>x?:;
if(d[v]>d[u]+duv){
d[v]=d[u]+duv;
q.push(edge(v,d[v],));
}
}
}
return d[n]<=k;
}
inline int bsearch(int l,int r){
if(!C(f[r])) return-;
while(l<r){
int mid=l+(r-l)/;
if(C(f[mid])) r=mid;
else l=mid+;
}
return f[l];
}
int main(){
read(n); read(m); read(k);
for(int i=,u,v,w;i<=m;i++){
read(u); read(v); read(w);
add_edge(u,v,w);
f[i]=w;
}
sort(f+,f++m);
printf("%d\n",bsearch(,m));
return ;
}

Spfa:

 #include <bits/stdc++.h>
using namespace std; const int maxn=+,maxm=+,INF=<<;
int n,m,k,ect;
int hd[maxn],q[maxn],f[maxm],d[maxn];
bool vis[maxn];
struct edge{
int to,w,next;
edge(int to=,int w=,int next=):to(to),w(w),next(next){}
}g[maxm<<];
inline int read(int &x){ x=;int k=;char c;for(c=getchar();c<''||c>'';c=getchar())if(c=='-')k=-;for(;c>=''&&c<='';c=getchar())x=x*+c-'';return x*=k; }
inline void add_edge(int u,int v,int w){
g[++ect]=edge(v,w,hd[u]); hd[u]=ect;
g[++ect]=edge(u,w,hd[v]); hd[v]=ect;
}
inline bool C(int x){
for(int i=;i<=n;i++) d[i]=INF, vis[i]=false;
d[]=,vis[]=true;
int l=,r=;
q[r++]=;
while(l!=r){
int u=q[l++]; if(l==maxn-) l=;
vis[u]=false;
for(int i=hd[u];i;i=g[i].next){
int v=g[i].to,duv=g[i].w>x?:;
if(d[v]>d[u]+duv){
d[v]=d[u]+duv;
if(!vis[v]){
q[r++]=v; if(r==maxn-) r=;
vis[v]=true;
}
}
}
}
return d[n]<=k;
}
inline int bsearch(int l,int r){
if(!C(f[r])) return-;
while(l<r){
int mid=l+(r-l)/;
if(C(f[mid])) r=mid;
else l=mid+;
}
return f[l];
}
int main(){
read(n); read(m); read(k);
for(int i=,u,v,w;i<=m;i++){
read(u); read(v); read(w);
add_edge(u,v,w);
f[i]=w;
}
sort(f+,f++m);
printf("%d\n",bsearch(,m));
return ;
}

BZOJ_1614_ [Usaco2007_Jan]_Telephone_Lines_架设电话线_(二分+最短路_Dijkstra/Spfa)的更多相关文章

  1. 2018.07.20 bzoj1614: Telephone Lines架设电话线(二分+最短路)

    传送门 这题直接做显然gg" role="presentation" style="position: relative;">gggg,看这数据 ...

  2. [bzoj1614][Usaco2007Jan]Telephone Lines 架设电话线_二分答案_最短路

    Telephone Lines bzoj-1614 Usaco-2007Jan 题目大意:给你一个n个点m条边的带边权无向图,求最短路.可以选取k条边免费. 注释:$1\le n\le 10^3$,$ ...

  3. 【COGS】147. [USACO Jan08] 架设电话线(二分+spfa)

    http://cojs.tk/cogs/problem/problem.php?pid=147 学到新姿势了orz 这题求的是一条1-n的路径的最大路径最小. 当然是在k以外的. 我们可以转换一下. ...

  4. bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线【二分+spfa】

    二分答案,然后把边权大于二分值的的边赋值为1,其他边赋值为0,然后跑spfa最短路看是否满足小于等于k条边在最短路上 #include<iostream> #include<cstd ...

  5. [Usaco2007 Jan]Telephone Lines架设电话线(最短路,二分)

    [Usaco2007 Jan]Telephone Lines架设电话线 Description FarmerJohn打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向 ...

  6. 【bzoj1614】[Usaco2007 Jan]Telephone Lines架设电话线 二分+SPFA

    题目描述 Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N <= 1 ...

  7. BZOJ 1614 [Usaco2007 Jan]Telephone Lines架设电话线 (二分+最短路)

    题意: 给一个2e4带正边权的图,可以免费k个边,一条路径的花费为路径上边权最大值,问你1到n的最小花费 思路: 对于一个x,我们如果将大于等于x的边权全部免费,那么至少需要免费的边的数量就是 “设大 ...

  8. BZOJ1614: [Usaco2007 Jan]Telephone Lines架设电话线

    1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 892  Solved: ...

  9. BZOJ 1614: [Usaco2007 Jan]Telephone Lines架设电话线

    题目 1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec  Memory Limit: 64 MB Description Farm ...

随机推荐

  1. JavaScript 继承的几种模式

    /** * Created by 2016 on 2016/6/5. */ //1.原型链继承 //把子类的原型,定义为超类的实例 通过原型来访问超类的方法和属性 function Person(){ ...

  2. Oracle笔记1

    ORACLE: 目前分为12C(cloud云)和11G(grid网格)版本 --数据库基本概念 data--数据 database--数据库 DBMS--数据库管理系统 RDBMS--关系型数据库管理 ...

  3. 紧跟时代步伐,让我们拥抱MVC 3

    作为一个开发者,我们不希望技术很快的更新,这是因为我们还没有完全掌握原来技术的基础上,又要掌握新的技术,作为天天忙忙碌碌的程序员,我们不希望还要额外的时间来学习,尤其是当我们的年龄,逐渐的变大的时候, ...

  4. 【转】WPF获取外部EXE图标最简单的方法

    首先在工程添加对System.Drawing的引用 创建以下方法: public static ImageSource GetIcon(string fileName) { System.Drawin ...

  5. 解决php json_encode 出现的中文转码、乱码问题

    // 防止json中文转码 function jsonEncodeWithCN($data) { return preg_replace("/\\\u([0-9a-f]{4})/ie&quo ...

  6. MAC自带的lnmp

    MAC自身带有apache,php. 1.启动apache服务   sudo apachectl start/restart/stop 2.查看php的版本  php -v 3.让apache支持ph ...

  7. Control character in cookie value, consider BASE64 encoding your value , java操作cookie遇到中文会报错的解决方案

    项目当中用到cookie保存中文,但是会报如下错误: Control character in cookie value, consider BASE64 encoding your value 大概 ...

  8. 总结源码编译安装mysql

    最近在学习源码编译安装LAMP.LNMP时,一直遇到一个难题,就是就是mysql无论怎么源码编译安装,到最后启动服务都提示"Starting MySQL.The server quit wi ...

  9. boost linux 下安装

    1. 在boost 官网 http://www.boost.org/doc/libs/ 下载最新的boost 安装包 2. 解压至 /usr/local/ 目录下 3. cd /usr/local/b ...

  10. BZOJ Tyvj 1729 文艺平衡树

    Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3  ...