描述


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. 06_init()和destroy()方法

    [工程截图] [HelloWorld.java] package com.HigginCui; public class HelloWorld { public HelloWorld(){ Syste ...

  2. 工厂方法(Factory Pattern)

    工厂方法模式定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类.(注:“决定”不是指模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际 ...

  3. 要做一款APP-解放双手

    对方打字或发语音,我可以选择看屏幕或者听. 我说话,能够转化为文字.不需要点击开始按钮的那种.

  4. asp.net mvc上传头像加剪裁功能介绍

    正好项目用到上传+剪裁功能,发上来便于以后使用. 我不能告诉你们其实是从博客园扒的前台代码,哈哈. 前端是jquery+fineuploader+jquery.Jcrop 后台是asp.net mvc ...

  5. python(一)入门

    1.软件环境安装和配置 首先下载属于你的操作系统的对应的python安装包 2.傻瓜化下一步下一步 我直接勾选了配置python到path变量 然后完成 3.cmd命令行中测试一把 表示环境配置成功 ...

  6. mysqldump备份与还原mysql数据的实例

    有关mysql数据库的备份与还原,我们一般用下面两种方式来处理:1.使用into outfile 和 load data infile导入导出备份数据 本文原始链接:http://www.jbxue. ...

  7. ECshop网店系统百万级商品量性能优化-加快首页访问速度

    如果ECshop的商品数达到几万,十几万的时候,如果首页没有缓存,第一次访问的时候,你会发现其慢无比,原因就是清空了Cache后或者没有Cache的情况下,ECshop会Bulid一些Cache数据, ...

  8. Demo学习: CalendarPanel

    CalendarPane 学习CalendarPanel控件的常用事件. DayClick(...) //点击日期块空白部分触发EventClick(...) //点击日期块上事件触发RangeSel ...

  9. windows 下 scrapy的安装

    安装参考博客:http://davenzhang.com/scrapy_install.htm 我是先安装了scrapy,发现import scrapy 的时候报错.之后一次安装了下面关联软件的.ex ...

  10. uCGUI动态内存管理

    动态内存的堆区 /* 堆区共用体定义 */ typedef union { /* 可以以4字节来访问堆区,也可以以1个字节来访问 */ ]; /* required for proper aligne ...