[BZOJ4061][Cerc2012]Farm and factory
bzoj
鉴于是权限题,放一下题面。
Description
向Byteland的国王Bitolomew致敬!国王Bitolomew认为Byteland是一个独一无二的国家。它太小了,它所有的市民(包括国外)都只在农场或工厂之一工作,其中农场和工厂是两个不同的城市。因此每天早晨,每个城市的居民都在去这两个城市的路上通行。Byteland的交通网络包括一些连接两个不同城市的无向的道路,道路不会连向国家之外的城市(但是隧道和桥可能会这样)。两个城市间可能存在多条无向的道路。保证农场和工厂与所有城市连通。几个月前,为了改善交通状况,国王Bitolomew出台了过路费的政策,需要每个市民每次在通过相应道路时支付固定的费用Bitolomew希望这能引导市民重新考虑他们的上班路线,从而使得交通更加均匀畅通。国王的点子被他的谏者证明是不够完美的。每个Byteland的市民现在都开始走起了最便宜的上班路线。国王Bitolomew完全没想到会出现这种情况,然而过路费带来的收入着实提高了国家财政的收入。事实上,国王现在的经济状况实在是太好了,所以他准备在一个新的首都建一个新的城堡。新的首都必须和一些其他的城市通过无向的道路相连,这样才能从新首都到达每个城市。新建的道路可以设定非负的过路费(特别地,这里的过路费可以不是整数)。国王Bitolomew真的很讨厌车辆路过他的城堡所产生的噪声。他希望通过合理设定新道路的过路费使得从任意除了新首都之外的城市v到农场或工厂都不会经过新首都(注意这里v还包括农场和工厂)。另外,由于国王也要交过路费,所以他希望最小化从新首都到其他每个城市的平均过路费。请你帮助国王计算一下最小可能的平均值是多少吧。
Input
第一行一个正整数\(T\),表示有\(T\)组数据。
每组数据第一行两个正整数\(n\)和\(m\),表示Byteland有\(n\)个城市和\(m\)条道路,\(2\le n\le10^5,1\le m\le3\times10^5\)。
接下来\(m\)行,每行三个整数表示城市\(u\)和城市\(v\)之间有一条过路费为\(c\)的道路,\(1\le u,v \le n,u\neq v, 0\le c\le 10^6\)。两个城市间可能存在多条无向的道路。
农场所在的城市标号为\(1\),工厂所在的城市标号为\(2\)。
Output
对于每组数据输出一行,最小可能的从新首都到其他点所需过路费的平均值。
你的答案应该和标准答案误差不超过\(10^{-8}\)。
Sample Input
1
3 3
1 2 5
2 3 5
3 1 1
Sample Output
1.833333333333
sol
最小化平均过路费就是最小化总过路费。
我们设从\(1\)出发到每个点的最短路是\(f[i]\),从\(2\)出发到每个点的最短路是\(g[i]\),从新点出发到每个点的最短路是\(s[i]\)。新点到\(1,2\)号点的最短路是\(A,B\)。
为了保证最短路不经过新点,就需要满足:\(s_i+A\ge f_i,s_i+B\ge g_i\)。
同时根据最短路的定义,有\(s_i+f_i\ge A,s_i+g_i\le B\)。
我们要最小化\(\sum s_i\),所以\(s_i=\max(|A-f_i|,|B-g_i|)\)。
发现是个切比雪夫距离的式子,所以直接排个序取中位数即可。
code
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
int gi(){
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
#define ll long long
#define pi pair<ll,int>
#define mk make_pair
const int N = 1e5+5;
const int M = 6e5+5;
int T,n,m,to[M],nxt[M],ww[M],head[N],cnt,vis[N];
ll f[N],g[N];
priority_queue<pi,vector<pi>,greater<pi> >Q;
void link(int u,int v,int w){
to[++cnt]=v;nxt[cnt]=head[u];ww[cnt]=w;head[u]=cnt;
}
void Dijkstra(int s,ll *dis){
memset(vis,0,sizeof(vis));
dis[s]=0;Q.push(mk(0,s));
while (!Q.empty()){
int u=Q.top().second;Q.pop();
if (vis[u]) continue;vis[u]=1;
for (int e=head[u];e;e=nxt[e])
if (dis[to[e]]>dis[u]+ww[e])
dis[to[e]]=dis[u]+ww[e],Q.push(mk(dis[to[e]],to[e]));
}
}
int main(){
T=gi();while (T--){
n=gi();m=gi();
memset(head,0,sizeof(head));cnt=0;
for (int i=1;i<=m;++i){
int u=gi(),v=gi(),w=gi();
link(u,v,w);link(v,u,w);
}
memset(f,63,sizeof(f));memset(g,63,sizeof(g));
Dijkstra(1,f);Dijkstra(2,g);
for (int i=1;i<=n;++i){
ll x=f[i],y=g[i];
f[i]=x+y,g[i]=x-y;
}
sort(f+1,f+n+1);sort(g+1,g+n+1);f[0]=g[0]=0;
for (int i=1;i<=n;++i) f[i]+=f[i-1],g[i]+=g[i-1];
if (n&1) printf("%.8lf\n",1.0*(f[n]-f[n/2]-f[n/2+1]+g[n]-g[n/2]-g[n/2+1])/(2.0*n));
else printf("%.8lf\n",1.0*(f[n]-2*f[n/2]+g[n]-2*g[n/2])/(2.0*n));
}
return 0;
}
[BZOJ4061][Cerc2012]Farm and factory的更多相关文章
- 【BZOJ4061】[Cerc2012]Farm and factory(最短路,构造)
[BZOJ4061][Cerc2012]Farm and factory(最短路,构造) 题面 BZOJ 然而权限题QwQ. 题解 先求出所有点到达\(1,2\)的最短路,不妨记为\(d_{u,1}, ...
- BZOJ4061/Gym100624F CERC2012 Farm and Factory 最短路、切比雪夫距离
传送门--BZOJCH 传送门--Vjudge 设\(f_i\)表示\(i\)到\(1\)号点的最短距离,\(g_i\)表示\(i\)到\(2\)号点的最短距离,\(s_i\)表示\(n+1\)号点到 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 要back的题目 先立一个flag
要back的题目 目标是全绿!back一题删一题! acmm7 1003 1004 acmm8 1003 1004 sysu20181013 Stat Origin Title Solved A Gy ...
- Browse Princeton's Series (by Date) in Princeton Economic History of the Western World
Browse Princeton's Series (by Date) in Princeton Economic History of the Western World Joel Mokyr, S ...
- 题解-bzoj4061 CERC-2012Farm and Factory
Problem Please contact lydsy2012@163.com! 题意概要:给定\(n\)点\(m\)边无向图,设定两个起点为\(1,2\),现要求在图中增加一个点,并将这个点与其他 ...
- Codeforces Round #464 (Div. 2) B. Hamster Farm
B. Hamster Farm time limit per test2 seconds memory limit per test256 megabytes Problem Description ...
- Codeforces Round #464 (Div. 2) B. Hamster Farm[盒子装仓鼠/余数]
B. Hamster Farm time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)
一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...
随机推荐
- unity3D用什么语言开发好?
unity3D用什么语言开发好? 一.总结 一句话总结:选c# 同时U3D团队也会把支持的重心转移到C#,也就是说文档和示例以及社区支持的重心都在C#,C#的文档会是最完善的,C#的代码实例会是最详细 ...
- 你真的掌握 LVS、Nginx 及 HAProxy 的工作原理吗
你真的掌握 LVS.Nginx 及 HAProxy 的工作原理吗 当前大多数的互联网系统都使用了服务器集群技术,集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是 Web ...
- 【转】ext4+delalloc造成单次写延迟增加的分析
转自 http://blog.tao.ma/?p=58 这篇文章是淘宝内核组的刘峥同学在内部技术论坛上发表的一篇文章,但是由于刘峥同学目前没有blog,征得本人同意,贴在我的blog上,如果大家喜欢, ...
- mysql快问快答
1.查看mysql版本 select version(); show variables like 'version'; 2.mysql 可以按timestamp排序吗? 可以 3.怎么查询商户下是否 ...
- Qt5全局热键-QxtGlobalShortcut
最近做一个项目需要注册全局热键,在网上搜索发现有个第三方库 libqxt 中给出一个比较好的跨平台的解决方案,就是 QxtGlobalShortcut. 但是编译过程中发现这个库用到的QAbstrac ...
- tomcat安装图文教程
tomcat安装图文教程 运维 memory 发布于June 1, 2013 标签: Windows, Tomcat 下载Tomcat安装文件,官方下载地址是:http://tomcat.apache ...
- Math Issues
Oh no, our Math object was "accidently" reset. Can you re-implement some of those function ...
- Java复习11. 单例编程
Java复习11. 单例编程 1.最简单的写法,那个方式是线程不安全的 public class Singleton { private static Singleton instance; ...
- 转载-lvs官方文档-LVS集群中的IP负载均衡技术
章文嵩(wensong@linux-vs.org) 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载均衡技术(VS/NAT.VS/TUN ...
- SpringXML方式配置bean的集合注入:list,map,properties
新建一个bean,设置相应的集合属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public class Collecti ...