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的更多相关文章

  1. 【BZOJ4061】[Cerc2012]Farm and factory(最短路,构造)

    [BZOJ4061][Cerc2012]Farm and factory(最短路,构造) 题面 BZOJ 然而权限题QwQ. 题解 先求出所有点到达\(1,2\)的最短路,不妨记为\(d_{u,1}, ...

  2. BZOJ4061/Gym100624F CERC2012 Farm and Factory 最短路、切比雪夫距离

    传送门--BZOJCH 传送门--Vjudge 设\(f_i\)表示\(i\)到\(1\)号点的最短距离,\(g_i\)表示\(i\)到\(2\)号点的最短距离,\(s_i\)表示\(n+1\)号点到 ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. 要back的题目 先立一个flag

    要back的题目 目标是全绿!back一题删一题! acmm7 1003 1004 acmm8 1003 1004 sysu20181013 Stat Origin Title Solved A Gy ...

  5. 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 ...

  6. 题解-bzoj4061 CERC-2012Farm and Factory

    Problem Please contact lydsy2012@163.com! 题意概要:给定\(n\)点\(m\)边无向图,设定两个起点为\(1,2\),现要求在图中增加一个点,并将这个点与其他 ...

  7. Codeforces Round #464 (Div. 2) B. Hamster Farm

    B. Hamster Farm time limit per test2 seconds memory limit per test256 megabytes Problem Description ...

  8. 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 ...

  9. PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)

    一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...

随机推荐

  1. cookie与session(略谈)

    cookie (储存在用户本地终端上的数据) Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密).定义 ...

  2. Jdev 本地RUN页面时候,将异常直接显示出来,而不是乱码

    本地运行页面时,经常会遇到以下错误 oracle.jbo.JboException: JBO-29000: JBO-29000: JBO-26028: ???? MemberAttributesDis ...

  3. 08day03

    一.eclipse的使用 可能是全宇宙最好用的IDE debug 查看执行过程 查看源码 二.模块的常用方法 __name__ __file__ __doc__ 三.函数 参数 参数默认值 可变参数 ...

  4. 我要复习python啦(一)

    一.变量 那些曾经怎么也看不懂的东西,突然有一天就懂了.这就是复习的力量吗? 1 变量的赋值 a = 10 做了上面的图所描述的事情 1)开辟一块内存,创建一个值为10的整数 2)创建一个a的标记 3 ...

  5. 无密码登陆的ssh和ssh-agent

    原文地址:http://lxshopping.blog.51cto.com/4542643/1179864/ 一,不需要输密码的ssh 原理:首先服务器端把公钥传给Client端,Client端在验证 ...

  6. scrapy 6023 telnet查看爬虫引擎相关状态

    Telnet终端(Telnet Console) Scrapy提供了内置的telnet终端,以供检查,控制Scrapy运行的进程. telnet仅仅是一个运行在Scrapy进程中的普通python终端 ...

  7. 转:Hive SQL的编译过程

    Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用.美团数据仓库也是基于Hive搭建,每天执行近万次的Hive ETL计算流程,负责每天数百GB的数据存储和分析.Hive的稳定性和 ...

  8. vue 可编辑表格组件

    <template> <div class="table"> <table border="1px" v-dragform> ...

  9. OC-初识面向对象

    面向对象和面向过程思想 OC是面向对象的,C是面向过程的.面向对象和面向过程只是解决问题的两种不同思想 面向对象和面向过程的区别 以用电脑听歌为例子 面向过程 打开电脑 播放电脑中的歌曲 关闭电脑 面 ...

  10. 一张图带你了解OKhttp框架