bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线
来源:互联网 发布:淘宝店铺无流量 编辑:程序博客网 时间:2024/06/06 00:53
题目
又是最小最大值问题,这显然是满足二分性质的。
二分最大值,把权值比它小的边新权值设为0,比它大的设为1。然后再跑一遍最短路,比较到n的距离与k的大小就好了。
#include<bits/stdc++.h>#define N 20000using namespace std;int n,p,k,l,r,mid,mn,x,y,z;int first[N+5],nxt[N+5],to[N+5],val[N+5],siz; int dis[N+5],vis[N+5],inf;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}inline int read(){ int x=0,b=1; char c=nc(); for(;!(c<='9'&&c>='0');c=nc())if(c=='-')b=-1; for(;c<='9'&&c>='0';c=nc())x=x*10+c-'0'; return x*b;}inline void add(int x,int y,int z){ nxt[siz]=first[x]; first[x]=siz; to[siz]=y; val[siz]=z; siz++;}inline bool check(int mx){ memset(vis,false,sizeof(vis)); memset(dis,37,sizeof(dis)),inf=dis[0]; dis[1]=0,vis[1]=true; queue <int> Q;Q.push(1); while(!Q.empty()) { int x=Q.front();Q.pop();vis[x]=false; for(int i=first[x];i!=-1;i=nxt[i]) { int u=to[i]; if(dis[u]>dis[x]+(val[i]>mx)) { dis[u]=dis[x]+(val[i]>mx); if(vis[u])continue; vis[u]=true,Q.push(u); } } } if(dis[n]<=k)return true; return false;} int main(){ freopen("in.txt","r",stdin); n=read(),p=read(),k=read(); memset(first,-1,sizeof(first)); for(int i=1;i<=p;i++) x=read(),y=read(),z=read(),add(x,y,z),add(y,x,z); mn=~0u>>1; l=0,r=1000000; while(l<=r) { mid=(l+r)/2; if(check(mid))mn=min(mn,mid),r=mid-1; else l=mid+1; } cout<<(mn==~0u>>1?-1:mn); return 0;}
阅读全文
0 0
- [BZOJ1614][Usaco2007 Jan]Telephone Lines架设电话线
- BZOJ1614: [Usaco2007 Jan]Telephone Lines架设电话线
- [BZOJ1614][Usaco2007 Jan]Telephone Lines架设电话线
- bzoj1614【Usaco2007 Jan】Telephone Lines 架设电话线
- bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线
- [Usaco2007 Jan]Telephone Lines架设电话线
- 1614: [Usaco2007 Jan]Telephone Lines架设电话线
- [Usaco2007 Jan]Telephone Lines架设电话线
- 1614: [Usaco2007 Jan]Telephone Lines架设电话线
- 【bzoj1614】【Usaco2007 Jan】Telephone Lines架设电话线 (spfa+二分)题解&代码
- bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线(spfa+二分答案)
- BZOJ1614 [Usaco2007 Jan]Telephone Lines架设电话线 二分/魔性剪枝/最小边长连通
- BZOJ [Usaco2007 Jan]Telephone Lines架设电话线(POJ 3662)
- BZOJ 1614: [Usaco2007 Jan]Telephone Lines架设电话线
- SPFA+二分-BZOJ-1614-[Usaco2007 Jan]Telephone Lines架设电话线
- 【BZOJ 1614】: [Usaco2007 Jan]Telephone Lines架设电话线 spfa+二分
- [bzoj 1614][Usaco2007 Jan]Telephone Lines架设电话线
- (1614 [Usaco2007 Jan]Telephone Lines架设电话线)
- 升级到AndroidStudio3.0之后项目打包遇到的问题及解决方案
- 阿里云ECS服务切换云数据库RDS
- 第五章 Extjs如何实现“T”型系统首页布局 (入门教程)
- 使用layer.alert注意事项
- Java核心技术--数组拷贝
- bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线
- unity3d 获取cpu 型号 android
- kendoui中grid中新建一行序号加一
- 非递归求解汉诺塔的两种方法
- 微服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka
- java集合框架的练习之斗地主洗牌发牌的模拟(初级版)
- tunning-prime优化mysql建议
- maven deploy到nexus报错:Return code is: 401, ReasonPhrase:Unauthorized
- iframe session失效,跳转登录页面