Contest20140705 testA 二分
testA
输入文件:
testA.in 输出文件testA.out
时限2000ms
问题描述:
有一个城市拥有N个节点,被M条有权无向路径连接。现在你要在一个地方(可以在路径上当然也可以在节点上)开设一家咖啡馆,使得所有节点达到这个咖啡馆的最短路里面最大值最小(也就是说离咖啡馆最远的节点距离尽可能得小),求出这个最大值的最小值。
输入描述:
第一行N和M。
第2至M+1行,每行三个整数U,V,W。表示从U到V有一条权值为W的无向边。
输出描述:
一行一个数表示答案。四舍五入至2位小数
数据范围N<=200 , W<=100000 , M<=19900
样例输入:
3
2
1 2 100
2 3 1
样例输出:
50.50
这道题考场上我是直接输出了最小生成树的重心。是当时我误认为在这道题里面,最小生成树可以等效为最短路树。
正解是二分答案,判断是否有任何一条边可以安咖啡馆。
至少A了后觉得这道题的确很简单。
还有以后要注意关于交题前要删注释,小数位数按题目所说的写。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- #define MAXV 170000
- #define MAXE 170000
- #define MAXN 900
- #define PROB "testA"
- #define INF 0x3f3f3f3f
- struct Edge
- {
- int np,val;
- Edge *next;
- bool flag;
- }E[MAXE],*V[MAXV];
- int m,n;
- int map[MAXN][MAXN];
- struct aaa
- {
- int x,y,d;
- }el[MAXE];
- int tope=-,topl=-;
- void addedge(int x,int y,int z)
- {
- el[++topl].x=x;
- el[topl].y=y;
- el[topl].d=z;
- E[++tope].np=y;
- E[tope].val=z;
- E[tope].next=V[x];
- V[x]=&E[tope];
- E[++tope].np=x;
- E[tope].val=z;
- E[tope].next=V[y];
- V[x]=&E[tope];
- }
- void init()
- {
- int i,j,k;
- for (i=;i<=n;i++)
- {
- for (j=;j<=n;j++)
- {
- for (k=;k<=n;k++)
- {
- if (map[j][k]>map[j][i]+map[i][k])
- map[j][k]=map[j][i]+map[i][k];
- }
- }
- }
- }
- pair<int,int> seg[MAXN];
- int tops=-,rg;
- void set_range(int x)
- {
- tops=-;
- rg=x;
- }
- void add_seg(int x,int y)
- {
- tops++;
- if (x>y)throw "E";
- seg[tops].first=x;
- seg[tops].second=y;
- }
- bool full()
- {
- int i,x=;
- sort(seg,&seg[tops+]);
- for (i=;i<=tops;i++)
- {
- if (x<seg[i].first)return false;
- if (x>seg[i].second)continue;
- x=seg[i].second+;
- }
- if (x>rg)return true;
- return false;
- }
- int main()
- {
- freopen(PROB".in","r",stdin);
- // freopen(PROB".out","w",stdout);
- int i,j,k,x,y,z;
- scanf("%d%d",&n,&m);
- memset(map,INF,sizeof(map));
- for (i=;i<m;i++)
- {
- scanf("%d%d%d",&x,&y,&z);
- addedge(y,x,z*);
- map[x][y]=map[y][x]=min(map[x][y],z*);
- }
- for (i=;i<=n;i++)map[i][i]=;
- init();
- int l,r,mid;
- l=;r=;
- int flag=-;
- while (l+<r)
- {
- mid=(l+r)/;
- flag=;
- for (i=;i<=topl;i++)
- {
- set_range(el[i].d);
- for (j=;j<=n;j++)
- {
- x=mid-map[el[i].x][j];
- y=mid-map[el[i].y][j];
- if (x<&&y<)
- {
- add_seg(,el[i].d);
- break;
- }
- if (x>=el[i].d||y>=el[i].d)
- {
- continue;
- }
- if (x+y>=el[i].d)
- {
- continue;
- }
- add_seg(max(,x+),min(el[i].d,el[i].d-y-));
- }
- if (!full())flag=;
- if (flag==)
- break;
- }
- if (flag==)
- {
- l=mid;
- continue;
- }
- if (flag==)
- {
- r=mid;
- continue;
- }
- }
- double ans=r/2.0;
- printf("%.2lf",ans);
- return ;
- }
Contest20140705 testA 二分的更多相关文章
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
- BZOJ 2756: [SCOI2012]奇怪的游戏 [最大流 二分]
2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 3352 Solved: 919[Submit][Stat ...
- 整体二分QAQ
POJ 2104 K-th Number 时空隧道 题意: 给出一个序列,每次查询区间第k小 分析: 整体二分入门题? 代码: #include<algorithm> #include&l ...
- [bzoj2653][middle] (二分 + 主席树)
Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序列s. 回答Q个这样的询问:s的左端点在[a,b ...
- [LeetCode] Closest Binary Search Tree Value II 最近的二分搜索树的值之二
Given a non-empty binary search tree and a target value, find k values in the BST that are closest t ...
- [LeetCode] Closest Binary Search Tree Value 最近的二分搜索树的值
Given a non-empty binary search tree and a target value, find the value in the BST that is closest t ...
- jvascript 顺序查找和二分查找法
第一种:顺序查找法 中心思想:和数组中的值逐个比对! /* * 参数说明: * array:传入数组 * findVal:传入需要查找的数 */ function Orderseach(array,f ...
- BZOJ 1305: [CQOI2009]dance跳舞 二分+最大流
1305: [CQOI2009]dance跳舞 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲 ...
- BZOJ 3110 [Zjoi2013]K大数查询 ——整体二分
[题目分析] 整体二分显而易见. 自己YY了一下用树状数组区间修改,区间查询的操作. 又因为一个字母调了一下午. 貌似树状数组并不需要清空,可以用一个指针来维护,可以少一个log 懒得写了. [代码] ...
随机推荐
- cocos2d-x学习日志(13) --A星寻路算法demo
你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置,避开墙壁和障碍物呢?如果是的话,请看这篇教程,我们会展示如何使用A星寻路算法来实现它! A星算法简介: A*搜寻算法俗称A星 ...
- 【UML九种图系列】之用例图
用例图: 由参与者(Actor).用例(UseCase)以及它们之间的关系构成的用于描述系统功能的动态视图称为用例图.用例图描述了系统提供的一个功能单元.用例图的主要目的是帮助开发团队以一种图形化的方 ...
- linux 安装软件的地方
用下边这个命令:mysqladmin -u root -p variables root是你的数据库帐号回车后会提示你输入密码,输入上边填写的帐号对应的密码 回车后出来一个大表,找到datadir这一 ...
- HttpModule HttpHandler HttpHandlerFactory 学习笔记
1.HttpModule 最常见的是使用HttpModule来做页面权限控制. 在新建类库添加如下代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...
- php面向对象设计模式
为什么学习设计模式: 1,更深入的了解面向对象的思想 2,有利于开发出扩展性强的东西 什么是设计模式:经常出现的典型场景的典型解决方案,就是设计模式.举个例子生活中的设计模式:比如泡妞思路,象棋招数等 ...
- Java SE (2)之 Graphics 画图工具
Graphics 绘图类: 提供两个方法.Paint (绘图,被系统自动调用) repaint(重绘) Paint 调用原理(1.窗口最大化,再最小化 窗口的大小发生变化 Repaint函数被调 ...
- Android Studio美化之优雅的logcat
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 先来个图,图样吐sexy: 很简单,跟我走吧,两步: 1. 引入Logger库 首先,这个sexy ...
- ubuntu15.10升级时校验和不符的解决方法
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 # 错误 # 原因分析 进入/var/lib/apt/lists/partial看下吧: 看到了吧 ...
- 这次是C#中的接口
接口的出现,是为了解决C#中不允许多重继承的问题. 1.什么是接口? 我觉得可以把接口理解为对一组方法声明进行的统一命名,但这些方法没有提供任何实现. 通过接口,就可以对方法进行统一管理,避免了在每种 ...
- MVC初学1
MVC - Model ,View, Control 主要的程序思想:约定优于配置 百度下载程序:百度一下 密码:654321 百度视频地址:百度一下