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. Java网络编程学习A轮_01_目标与基础复习

    A. A轮目标 复习网络编程基础知识,重点学习下TCP三次握手四次挥手,以及可能引发的异常情况. 回顾 Socket 编程,好多年没写(chao)过相关代码了. 重学 NIO,以前学的基本忘光了,毕竟 ...

  2. Java中的数据结构及排序算法

    (明天补充) 主要是3种接口:List Set Map List:ArrayList,LinkedList:顺序表ArrayList,链表LinkedList,堆栈和队列可以使用LinkedList模 ...

  3. 英语每日阅读---7、VOA慢速英语(翻译+字幕+讲解):卡梅伦呼吁女性移民学英语

    英语每日阅读---7.VOA慢速英语(翻译+字幕+讲解):卡梅伦呼吁女性移民学英语 一.总结 一句话总结: a.learn English or be deported:British Prime M ...

  4. CSS3:@font-face规则

    前言 过去,Web设计师为了保证网站能够正常显示,只能使用“Web安全字体”,即每台机器都预装的字体.但Web安全字体有时并不好看... @font-face能够使得任何一台机器能够显示理想中的字体. ...

  5. Java 完美判断字符串中中文字符【中文符号】

    package com.cmc.util; import java.util.regex.Pattern; public class CharUtil { public static void mai ...

  6. H3C Huawei 交换机 IPv6环境配置

    # 使能IPv6报文转发功能. <Sysname> system-view [Sysname] ipv6 # 使能DHCPv6服务器功能. <Sysname> system-v ...

  7. yyyy-MM-dd EEE hh:mm:ss(日期转换)

    <script> /** * 对Date的扩展,将 Date 转化为指定格式的String * 月(M).日(d).12小时(h).24小时(H).分(m).秒(s).周(E).季度(q) ...

  8. 【hdu1005】Number Sequence

    题目描述 一个数列的定义如下: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A和B,你要求出f(n). 输入 输 ...

  9. 解决方案:System.InvalidOperationException: 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。

    System.InvalidOperationException: This implementation is not part of the Windows Platform FIPS valid ...

  10. Win10 怎么给php文件设置默认打开应用

    一,首先以管理员身份打开命令提示符 二,assoc .php=phpfile 创建一个文件关联 三,ftype phpfile="E:\Program Files\Sublime Text ...