描述


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. Css颜色定义的方法汇总color属性设置方式

    颜色的定义方式用rgb()里面带上十进制的数字来定义. color:rgb(211,123,135); 用预定义的颜色名称. color:red; rgba()最后一个参数是不透明度. color:r ...

  2. 使用XmlPullParser对xml进行读取

    XML文件是一种标记性语言;在开发中经常在接口交互时被用作报文传输或者把自定义的类序列化为XML的形式存储到数据库.正因为XML文件这么常用,使用JAVA对XML文件进行读写操作是每一个开发人员必须掌 ...

  3. mysql 数据库还原出错ERROR:Unknown command '\' mysql中断

    其实造成这个问题的原因还是由于编码的问题,网站数据库设置的是gbk 的,mysql默认是gbk:但是在导出数据的时候导出了utf8的sql文件,不管我如何重新导入,在连接数据库后使用set names ...

  4. jQuery 扩展 【ajax实例】

    先前写工具类都是自定义类,直接prototype,jQuery扩展这一块儿,一直也没写过,刚好今天有空,写个试试. 已经有很多人对jQuery,jQuery.fn,jQuery.fn.extend详细 ...

  5. JavaScript 中的内存泄漏

    JavaScript 中的内存泄漏 JavaScript 是一种垃圾收集式语言,这就是说,内存是根据对象的创建分配给该对象的,并会在没有对该对象的引用时由浏览器收回.JavaScript 的垃圾收集机 ...

  6. [数据库连接字符串] Access 连接字符串

    [数据库连接字符串] Access 连接字符串 //ODBC 标准安全策略 Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb ...

  7. hdu 3549 Flow Problem Edmonds_Karp算法求解最大流

    Flow Problem 题意:N个顶点M条边,(2 <= N <= 15, 0 <= M <= 1000)问从1到N的最大流量为多少? 分析:直接使用Edmonds_Karp ...

  8. Unity3d Shader开发(四)UsePass ,GrabPass ,SubShader Tags

    (一)UsePass 命令 使用 来自另一个着色器的命名通道. Syntax 语法 UsePass "Shader/Name" 插入所有来自给定着色器中的给定名字的通道.Shade ...

  9. python @property 属性

    在绑定属性时,如果我们直接把属性暴露出去,显然不合适,是通过getter和setter方法来实现的,还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性: class P ...

  10. python中数据的保存

    1.将list中的数据写入到excel文件中 利用python包numpy(实现方式应该有许多种,这里只是记录成功实现的一种)中的savetxt 局限性:要保存的list可以为[1,2,3,4,5]这 ...