POJ 3662 Telephone Lines(二分答案+SPFA)

时间:2021-11-09 04:16:11

【题目链接】 http://poj.org/problem?id=3662

【题目大意】

  给出点,给出两点之间连线的长度,有k次免费连线,

  要求从起点连到终点,所用的费用为免费连线外的最长的长度。

  求最小费用。

【题解】

  二分答案,对于大于二分答案的边权置为1,小于等于的置为0,
  则最短路就是超出二分答案的线数,如果小于等于k,则答案是合法的

【代码】

#include <cstdio>
#include <cstring>
using namespace std;
const int N=200010,inf=~0U>>2,M=200000;
int ans=-1,x,S,T,time[N],q[N],size,h,t,n,m,k,ed,dis[N],in[N],nxt[N],w[N],v[N],g[N],u,e,cost;
void add(int x,int y,int z){v[++ed]=y;w[ed]=z;nxt[ed]=g[x];g[x]=ed;}
bool spfa(int S,int limit){
for(int i=1;i<=n;i++)dis[i]=inf,in[i]=0,time[i]=0;
time[S]=1,dis[S]=0,in[S]=1;
int i,x,size; q[h=t=size=1]=S;
while(size){
for(i=g[x=q[h]],h=(h+1)%M,size--;i;i=nxt[i])if(dis[x]+(w[i]>limit?1:0)<dis[v[i]]){
dis[v[i]]=dis[x]+(w[i]>limit?1:0);
if(!in[v[i]]){
time[v[i]]++,t=(t+1)%M,size++,in[q[t]=v[i]]=1;
if(time[v[i]]>n)return 0;
}
}in[x]=0;
}return dis[T]<=k;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
memset(v,0,sizeof(v)); memset(nxt,0,sizeof(nxt));
memset(w,0,sizeof(w)); memset(g,0,sizeof(g)); ed=0;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&u,&e,&cost);
add(u,e,cost);add(e,u,cost);
}int l=0,r=1000000;T=n;
while(l<=r){
int mid=(l+r)>>1;
if(spfa(1,mid)){ans=mid;r=mid-1;}
else l=mid+1;
}return printf("%d\n",ans),0;
}

  

POJ 3662 Telephone Lines(二分答案+SPFA)的更多相关文章

  1. POJ 3662 Telephone Lines &lpar;二分&plus;Dijkstra&colon; 最小化第k大的值&rpar;

    题意 Farmer John想从电话公司修一些电缆连接到他农场.已知N个电线杆编号为1,2,⋯N,其中1号已经连接电话公司,N号为农场,有P对电线杆可连接. 现给出P对电线杆距离Ai,Bi,Li表示A ...

  2. POJ 3662 Telephone Lines &lpar;二分&plus;dijkstra&rpar;

    题意: 多年以后,笨笨长大了,成为了电话线布置师.由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人. 该市周围分布着N(1<=N<=1000)根据1……n顺序编号的废弃的电话 ...

  3. POJ 3662 Telephone Lines&lpar;二分&plus;最短路&rpar;

    查看题目 最小化第K大值. 让我怀疑人生的一题目,我有这么笨? #include <cstdio> #include <queue> #include <cstring& ...

  4. &lpar;poj 3662&rpar; Telephone Lines 最短路&plus;二分

    题目链接:http://poj.org/problem?id=3662 Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total ...

  5. POJ 3662 Telephone Lines【二分答案&plus;最短路】&vert;&vert;【双端队列BFS】

    <题目链接> 题目大意: 在一个节点标号为1~n的无向图中,求出一条1~n的路径,使得路径上的第K+1条边的边权最小. 解题分析:直接考虑情况比较多,所以我们采用二分答案,先二分枚举第K+ ...

  6. POJ 3662 Telephone Lines【Dijkstra最短路&plus;二分求解】

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7214   Accepted: 2638 D ...

  7. poj 3662 Telephone Lines spfa算法灵活运用

    意甲冠军: 到n节点无向图,它要求从一个线1至n路径.你可以让他们在k无条,的最大值.如今要求花费的最小值. 思路: 这道题能够首先想到二分枚举路径上的最大值,我认为用spfa更简洁一些.spfa的本 ...

  8. poj 3662 Telephone Lines(最短路&plus;二分)

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6973   Accepted: 2554 D ...

  9. POJ - 3662 Telephone Lines &lpar;Dijkstra&plus;二分&rpar;

    题意:一张带权无向图中,有K条边可以免费修建.现在要修建一条从点1到点N的路,费用是除掉免费的K条边外,权值最大的那条边的值,求最小花费. 分析:假设存在一个临界值X,小于X的边全部免费,那么此时由大 ...

随机推荐

  1. Python简单爬虫入门一

    为大家介绍一个简单的爬虫工具BeautifulSoup BeautifulSoup拥有强大的解析网页及查找元素的功能本次测试环境为python3.4(由于python2.7编码格式问题) 此工具在搜索 ...

  2. &lbrack;C&plus;&plus;&rsqb; MyList&lt&semi;T&gt&semi;

    完成作业型...保证无bug,完全没考虑效率. #include <iostream> using namespace std; #define DEBUG #ifdef DEBUG #d ...

  3. ios device model 详细内容

    参考 这里:https://theiphonewiki.com/wiki/Models http://en.wikipedia.org/wiki/List_of_iOS_devices http:// ...

  4. UVALive 6450 Social Advertising DFS解法

    题意:一些人有朋友关系,在某个人的社交网站上投放广告可以被所有该人的直接朋友看到,问最小投放多少个广告使给出的人都看到广告.(n<=20) 解法:看到n的范围可以想到用二进制数表示每个人被覆盖与 ...

  5. &lbrack;CareerCup&rsqb; 14&period;1 Private Constructor 私有构建函数

    14.1 In terms of inheritance, what is the effect of keeping a constructor private? 这道题问我们用继承特性时,如果建立 ...

  6. 关于使用&quot&semi;&sol;&quot&semi;来 dispatcherServlet 的url-pattern带来的问题

    之前一直使用*.do来做的,但是绝的*.do很丑,于是就改用"/"来配置: <servlet> <servlet-name>dispatcherServle ...

  7. CDN缓存策略FAQ

    1.CDN加速原理通过动态域名解析,网友的请求被分配到离自己最快的服务器.CDN服务器直接返回缓存文件或通过专线代理原站的内容.网络加速+内容缓存,有效提供访问速度 2.CDN节点数量全国多个机房,每 ...

  8. No saved view state could be found for the view identifier

    解决方法: javax.faces.application.ViewExpiredException:No saved view state could be found for the view i ...

  9. Go Global 之怎样在全球Azure上使用Azure Free Account

    随着中国用户出海的越来越多,同学们自学Azure Global 功能的积极性也越来越高.怎样开启Azure Global 账号,有哪些Global Azure的功能可以免费使用,能不能用国内的信用卡和 ...

  10. 2019年桌面Linux需要做好的7件事

    2019年桌面Linux需要做好的7件事 新的一年已经到来,这意味着又一年过去了,Linux还是没有发现自己主宰了桌面.Linux在许多方面做得非常好,在接下来的几周,我们将研究一些最适合您各种需求的 ...