BZOJ_1614_ [Usaco2007_Jan]_Telephone_Lines_架设电话线_(二分+最短路_Dijkstra/Spfa)
描述
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)的更多相关文章
- 2018.07.20 bzoj1614: Telephone Lines架设电话线(二分+最短路)
传送门 这题直接做显然gg" role="presentation" style="position: relative;">gggg,看这数据 ...
- [bzoj1614][Usaco2007Jan]Telephone Lines 架设电话线_二分答案_最短路
Telephone Lines bzoj-1614 Usaco-2007Jan 题目大意:给你一个n个点m条边的带边权无向图,求最短路.可以选取k条边免费. 注释:$1\le n\le 10^3$,$ ...
- 【COGS】147. [USACO Jan08] 架设电话线(二分+spfa)
http://cojs.tk/cogs/problem/problem.php?pid=147 学到新姿势了orz 这题求的是一条1-n的路径的最大路径最小. 当然是在k以外的. 我们可以转换一下. ...
- bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线【二分+spfa】
二分答案,然后把边权大于二分值的的边赋值为1,其他边赋值为0,然后跑spfa最短路看是否满足小于等于k条边在最短路上 #include<iostream> #include<cstd ...
- [Usaco2007 Jan]Telephone Lines架设电话线(最短路,二分)
[Usaco2007 Jan]Telephone Lines架设电话线 Description FarmerJohn打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向 ...
- 【bzoj1614】[Usaco2007 Jan]Telephone Lines架设电话线 二分+SPFA
题目描述 Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N <= 1 ...
- BZOJ 1614 [Usaco2007 Jan]Telephone Lines架设电话线 (二分+最短路)
题意: 给一个2e4带正边权的图,可以免费k个边,一条路径的花费为路径上边权最大值,问你1到n的最小花费 思路: 对于一个x,我们如果将大于等于x的边权全部免费,那么至少需要免费的边的数量就是 “设大 ...
- BZOJ1614: [Usaco2007 Jan]Telephone Lines架设电话线
1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 892 Solved: ...
- BZOJ 1614: [Usaco2007 Jan]Telephone Lines架设电话线
题目 1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec Memory Limit: 64 MB Description Farm ...
随机推荐
- IO流06_处理流
[处理流] 处理流可以隐藏底层设备上节点流的差异,并对外提供更加方便的输入/输出的方法. 使用处理流的思路: 使用处理流来包装节点流,程序通过处理流来执行输入输出功能,让节点流与底层的I/O设备.文件 ...
- Jsp页面里引入一个javascript文件,在jsp的onclick里怎么添加脚本文件里的方法
举个简单例子:首先新建use.js文件内容:function show(){ alert("aa");} 建html文件跟use.js放同目录下: <html>< ...
- springmvc(六)——视图和视图解析器
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoIAAAGrCAIAAADb2WEhAAAgAElEQVR4nOzdaVhTd78vfF8/z772c9 ...
- OpenJudge 2792 集合加法
1.链接地址: http://bailian.openjudge.cn/practice/2792 2.题目: 总Time Limit: 3000ms Memory Limit: 65536kB De ...
- 第36条:坚持使用Override注解
@Override 注解只能用在方法声明中,表示被注解的方法声明覆盖了超类型中的一个声明. @Target(ElementType.METHOD) @Retention(RetentionPolicy ...
- 抽象工厂(Abstract Factory)模式
一.抽象工厂(Abstract Factory)模式 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态. 为了方便引进抽象工厂模式,引进一个新概念:产品族(Product Family ...
- iOS 简单理解类的本质
1.类也是个对象 类是一个对象是Class类型的对象简称类对象 Class类型的定义 // 一个任意的类型,表示一个Objective-C类 typedef struct objc_class *Cl ...
- 让hyper-v调整console的大小
在hyper-v中centos的console一直都是1024x768的分辨率,后来找到一种修改分辨率的解决方法 grubby --update-kernel=ALL --args="vid ...
- 少年Vince之遐想
本文999纯水贴,然转载仍需注明: 转载至http://www.cnblogs.com/VinceYang1994/ 昨天去姑姑家拜年,表哥房间的角落里有一架缠有蜘蛛网的遥控直升飞机. 打开飞机及遥控 ...
- 恶心的学校机房SQL安装
学校机房每台PC(DELL OPTIPLEX 380)上有两个系统,分别对应XP中英文版.管理员将500G硬盘分为两部分(两个主分区,两个逻辑分区),每个系统占用一个主分区和一个逻辑分区,主分区都有冰 ...