当前位置: 首页 > news >正文

poj 3662 Telephone Lines (二分+最短路径)

  1 
http://poj.org/problem?id=3662
/* 2 二分+最短路径 3 题意:求解额外付出的最小的最大边,k段是免费的. 4 5 题目的关键在于枚举最小的最大边,如何枚举呢?用二分法,选一条边,重新构图; 6 在图中大于这条边的,记为1; 7 把小于等于这条边的 边记为0; 8 求 1-》n的最短距离len 9 10 题目有3种情况, 11 12 1 不连通的情况 13 14 2 不需要额外花费的情 15 3 需要花费(那么了一定存在一个边 使 len==k) 16 */ 17 #include<cstdio> 18 #include<algorithm> 19 #define inf 0x7fffffff 20 #define maxn 2000 21 using namespace std; 22 int n,p,k; 23 int map[maxn][maxn],dis[maxn],vis[maxn]; 24 struct node 25 { 26 int a; 27 int b; 28 int w; 29 }edge[maxn*10]; 30 int cmp(const node &A,const node &B) 31 { 32 return A.w<B.w; 33 } 34 void inite(int x)//重新构图 35 { 36 int i,j; 37 for(i=0;i<=n;i++) 38 { 39 for(j=0;j<=n;j++) 40 { 41 42 map[i][j]=inf; 43 44 } 45 } 46 for(i=0;i<p;i++) 47 { 48 int a=edge[i].a; 49 int b=edge[i].b; 50 int len=edge[i].w; 51 if(len<=x) 52 { 53 map[a][b]=map[b][a]=0; 54 } 55 else map[a][b]=map[b][a]=1; 56 } 57 } 58 int djk() 59 { 60 int i,j,min,key; 61 62 for(i=1;i<=n;i++) 63 { 64 dis[i]=map[1][i]; 65 vis[i]=0; 66 } 67 dis[1]=0; 68 vis[1]=1; 69 for(i=1;i<=n-1;i++) 70 { 71 min=inf; 72 for(j=1;j<=n;j++) 73 { 74 if(!vis[j]&&dis[j]<min) 75 { 76 min=dis[j]; 77 key=j; 78 } 79 } 80 vis[key]=1; 81 for(j=1;j<=n;j++) 82 { 83 if(!vis[j]&&map[key][j]!=inf&&dis[j]>dis[key]+map[key][j]) 84 dis[j]=dis[key]+map[key][j]; 85 } 86 } 87 return dis[n]; 88 } 89 int bin()//二分枚举最小的最大边 90 { 91 int head=0,tail=p-1; 92 while(head<=tail) 93 { 94 int mid=(head+tail)>>1; 95 inite(edge[mid].w); 96 if(djk()<=k)//求出最小的 97 { 98 tail=mid-1; 99 } 100 else head=mid+1; 101 } 102 return head; 103 } 104 int main() 105 { 106 int i; 107 while(scanf("%d%d%d",&n,&p,&k)!=EOF) 108 { 109 for(i=0;i<p;i++) 110 { 111 scanf("%d%d%d",&edge[i].a,&edge[i].b,&edge[i].w); 112 } 113 sort(edge,edge+p,cmp); 114 inite(0); 115 int f=djk(); 116 if(f==inf)printf("-1\n"); 117 else 118 { 119 if(f<=k)printf("0\n"); 120 else printf("%d\n",edge[bin()].w); 121 } 122 } 123 124 }

转载于:https://www.cnblogs.com/acSzz/archive/2012/05/06/2486570.html

相关文章:

  • RedHat9 安装JAVA JDK6
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之66---BREW 应用中的流媒体播放...
  • JAVA的树形操作
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之67---BREW 应用中的SVG技术...
  • cjdbc入门配置oracle
  • java大数据处理-千万级数据写xml
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之68---BREW 应用中的3维图像技术...
  • 三种常见中文内码的转换方法
  • Windows Phone 7 开发技术在线学习【2】 -- WP7 多任务之道
  • TUP:分享产品背后的技术和用户体验
  • sample_code
  • OGC标准介绍 18
  • PHP的基本常识(2)
  • 「Apple iOS 模仿者」华丽转身为「Apple iOS 挑战者」
  • Windows Phone 7 模拟器外观下载——Nokia Lumia 800
  • Apache Pulsar 2.1 重磅发布
  • C++入门教程(10):for 语句
  • CentOS 7 防火墙操作
  • GitUp, 你不可错过的秀外慧中的git工具
  • Golang-长连接-状态推送
  • leetcode-27. Remove Element
  • Node项目之评分系统(二)- 数据库设计
  • Vue.js源码(2):初探List Rendering
  • 从输入URL到页面加载发生了什么
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 计算机在识别图像时“看到”了什么?
  • 盘点那些不知名却常用的 Git 操作
  • 人脸识别最新开发经验demo
  • 深入 Nginx 之配置篇
  • 【云吞铺子】性能抖动剖析(二)
  • ​linux启动进程的方式
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • !!java web学习笔记(一到五)
  • #Spring-boot高级
  • (js)循环条件满足时终止循环
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (九十四)函数和二维数组
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (转)Unity3DUnity3D在android下调试
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net CHARTING图表控件下载地址
  • .NET Core WebAPI中封装Swagger配置
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET文档生成工具ADB使用图文教程
  • ?php echo ?,?php echo Hello world!;?
  • @NestedConfigurationProperty 注解用法
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [AIGC] Java 和 Kotlin 的区别
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [caffe(二)]Python加载训练caffe模型并进行测试1