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

传送门——BZOJCH

传送门——Vjudge


\(f_i\)表示\(i\)\(1\)号点的最短距离,\(g_i\)表示\(i\)\(2\)号点的最短距离,\(s_i\)表示\(n+1\)号点到\(i\)号点的最短距离,\(A=s_1,B=s_2\)

根据最短路三角形不等式,\(|f_i - A| \leq s_i \leq f_i + A , |g_i - B| \leq s_i \leq g_i + B\)

\(s_i\)要取到最小值,所以\(s_i = \max\{|f_i - A| , |g_i - B|\}\)

所以我们要求的是\(\sum\limits_{i=1}^N \max\{|f_i - A| , |g_i - B|\}\),这相当于求一个动点\((A,B)\)到平面上\(N\)个点\((f_i,g_i)\)的最小切比雪夫距离和。

切比雪夫距离可以转为曼哈顿距离,将坐标\((x,y)\)变为\((\frac{x+y}{2} , \frac{x-y}{2})\),前者的切比雪夫距离等效于后者的曼哈顿距离。而曼哈顿距离可以直接拆开横纵坐标然后取中位数。

注意:我天真的以为2012年的题不会卡SPFA……

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<algorithm>
#include<cstring>
#include<iomanip>
#include<queue>
#define INF 0x3f3f3f3f
//This code is written by Itst
using namespace std;inline int read(){int a = 0;char c = getchar();while(!isdigit(c) && c != EOF)c = getchar();while(isdigit(c)){a = a * 10 + c - 48;c = getchar();}return a;
}#define PLI pair < long long , int >
#define st first
#define nd second
const int MAXN = 1e5 + 7;
struct Edge{int end , upEd , w;
}Ed[MAXN * 6];
int head[MAXN] , N , M , cntEd;
long long dis[2][MAXN];
priority_queue < PLI > q;inline void addEd(int a , int b , int w){Ed[++cntEd].end = b;Ed[cntEd].w = w;Ed[cntEd].upEd = head[a];head[a] = cntEd;
}void SPFA(int ind){memset(dis[ind] , 0x3f , sizeof(long long) * (N + 1));dis[ind][ind + 1] = 0;q.push(PLI(0 , ind + 1));while(!q.empty()){PLI t = q.top();q.pop();if(-t.st != dis[ind][t.nd]) continue;for(int i = head[t.nd] ; i ; i = Ed[i].upEd)if(dis[ind][Ed[i].end] > dis[ind][t.nd] + Ed[i].w){dis[ind][Ed[i].end] = dis[ind][t.nd] + Ed[i].w;q.push(PLI(-dis[ind][Ed[i].end] , Ed[i].end));}}
}inline long long abss(long long x){return x < 0 ? -x : x;}void out(long long a , int b){cout << a / b << '.';a %= b;for(int i = 1 ; i <= 8 ; ++i){a *= 10;cout << a / b;a %= b;}putchar('\n');
}int main(){vector < long long > x , y;for(int T = read() ; T ; --T){N = read(); M = read();memset(head , 0 , sizeof(int) * (N + 1));cntEd = 0;for(int i = 1 ; i <= M ; ++i){int a = read() , b = read() , c = read();addEd(a , b , c); addEd(b , a , c);}SPFA(0); SPFA(1);x.clear(); y.clear();long long sum = 0;for(int i = 1 ; i <= N ; ++i){x.push_back(dis[0][i] - dis[1][i]);y.push_back(dis[0][i] + dis[1][i]);}sort(x.begin() , x.end()); sort(y.begin() , y.end());long long mid = x[N >> 1];for(int i = 0 ; i < N ; ++i)sum += abss(x[i] - mid);mid = y[N >> 1];for(int i = 0 ; i < N ; ++i)sum += abss(y[i] - mid);out(sum , 2 * N);cerr << N << ' ' << sum << endl;}return 0;
}

转载于:https://www.cnblogs.com/Itst/p/10467947.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

scrapy安装_爬虫框架Scrapy简介与安装

Scrapy 框架Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架&#xff0c;用途非常广泛。框架的力量&#xff0c;用户只需要定制开发几个模块就可以轻松的实现一个爬虫&#xff0c;用来抓取网页内容以及各种图片&#xff0c;非常之方便。Scrapy 使…

前端面试题(附上自己的回答)

一些开放性题目 1.自我介绍&#xff1a;除了基本个人信息以外&#xff0c;面试官更想听的是你与众不同的地方和你的优势。 2.项目介绍&#xff1f; 3.如何看待前端开发&#xff1f; 4.平时是如何学习前端开发的&#xff1f; 5.未来三到五年的规划是怎样的&#xff1f; position…

汇编语言的基础知识

汇编语言是在硬件上工作的编程语言&#xff0c;我们需要了解硬件系统的结构&#xff0c;才能有效的用汇编语言对其进行编程。 一&#xff1a;汇编语言的组成 1&#xff09;汇编指令&#xff1a;机器码的助记符&#xff0c;有对应的机器码。 2&#xff09;伪指令&#xff1a;没有…

亚马逊Simple Worklfow服务的骆驼演示

在上一篇文章中&#xff0c;我解释了为什么AWS SWF服务很好&#xff0c;并宣布了新的Camel SWF组件。 现在&#xff0c;组件文档已准备就绪&#xff0c; 这是一个简单的完全可用的演示。 它包含三个独立的独立骆驼路线&#xff1a; 工作流生产者允许我们与工作流进行交互。 它…

CODEVS 1205 单词反转

嗯.... 这道题看起来挺像一个字符串的题&#xff0c;但其实却错了&#xff0c;它实质上却用了一个栈进行了一个模拟&#xff08;当然还有一种鬼畜的做法&#xff0c;下面也会介绍到..... 首先先看题&#xff1a; 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题…

python 定义函数为什么有个长线_关于格式化:如何在Python中打破这条长线?

如何设置这样的长行格式&#xff1f;我想让它的宽度不超过80个字符&#xff1a;logger.info("Skipping {0} because its thumbnail was already in our system as {1}.".format(line[indexes[url]], video.title))这是我最好的选择吗&#xff1f;url "Skipping …

NodeJS中resolve添加地址无效

今天一个朋友在群里问了这样一个问题&#xff0c;他使用url.resolve()添加地址无效&#xff0c;我看了一下&#xff0c;发现是他没有注意细节&#xff0c; resolve可以在二级目录下增加&#xff0c;他使用的时候只是一级目录&#xff0c;所以添加会有问题。他使用的是如下这种…

centos配置jdk的环境变量

1、首先呢&#xff0c;centos下的JDK环境配置分两种情况&#xff0c;一直是root用户级别的jdk配置&#xff0c;另一种是其他用户组级别的配置。这里讲解的是root用户级别的配置。 我们已经下载解压好了jdk的目录。如下 2、编辑环境变量的配置文件&#xff1a; vi /etc/profile…

Python之字符串转换为日期、结合时区的日期操作

一、字符串转换为日期 方法一 s 2019-01-20 print(datetime.strptime(s, %Y-%m-%d)) # 2019-01-20 00:00:00 方法二 def parse_ymd(s):year_s, mon_s, day_s s.split(-)return datetime(int(year_s), int(mon_s), int(day_s)) s 2019-01-20 res parse_ymd(s) print(res) …

项目学生:带有Jersey的Web服务客户端

这是Project Student的一部分。 其他职位包括带有Jersey的Webservice Client &#xff0c; 业务层和带有Spring Data的持久性 。 RESTful Web应用程序洋葱的第一层是Web服务客户端。 它可以用来模仿包含AJAX内容的网页&#xff0c;也可以被webapp的编程用户用来模仿。 注意&am…

华为摄像机搜索软件_别人的终点华为的起点!用普惠AI守护城市安全

看点&#xff1a;华为好望的求索启示录&#xff01;如何让老百姓用上实惠的AI&#xff1f;你也许不知道&#xff0c;高空抛物已是城市生活中的一大难以治理的安全隐患。一个小小的烟头、水果从高处扔下来&#xff0c;就可能引起严重火灾、人员伤亡、财物破坏&#xff0c;事发后…

在WebGL场景中进行棋盘操作的实验

这篇文章讨论如何在基于Babylon.js的WebGL场景中&#xff0c;建立棋盘状的地块和多个可选择的棋子对象&#xff0c;在点选棋子时显示棋子的移动范围&#xff0c;并且在点击移动范围内的空白地块时向目标地块移动棋子。在这一过程中要考虑不同棋子的移动力和影响范围不同&#x…

em算法python代码_EM算法的python实现的方法步骤

导读热词前言&#xff1a;前一篇文章大概说了EM算法的整个理解以及一些相关的公式神马的&#xff0c;那些数学公式啥的看完真的是忘完了&#xff0c;那就来用代码记忆记忆吧&#xff01;接下来将会对python版本的EM算法进行一些分析。EM的python实现和解析引入问题(双硬币问题)…

第一阶段·Linux运维基础-第2章·Linux系统目录结构介绍

01 变量与PS1 02 添加用户 03 关闭SELinux 04 关闭iptables 05 显示中文乱码排查过程 06 总结 07 目录结构课程内容 08 Linux目录结构特点 09 Linux核心目录简介 10 Linux目录文件之配置文件 11 Linux核心目录文件之DNS及屌丝逃离洗浴中心之路 12 Linux核心目录文件…

使用junit-drools进行JBoss Drools单元测试

最近&#xff0c;我一直在大量使用JBoss Drools进行项目。 我不是Drools专家-我也不太相信这个框架&#xff0c;或者可能不是只相信该项目中的特定用例-我发现很难为基于Drools的业务规则编写简单&#xff0c;可维护的单元测试 。 这就是junit-drools诞生的方式-简单的帮助程序…

scrapy 采集网页出现丢失url的问题

url_list ["http://www.icoat.cc/news/list_18_3.html", "http://www.icoat.cc/news/list_18.html", "http://www.icoat.cc/news/list_18_2.html", ] for ls in url_list:   yield scrapy.Request(urlls, headersheader, callbackself.parseL…

java中重新加载指定文件_java-更改后重新加载属性文件

我将属性文件加载到一个类中,然后在整个应用程序中使用该类来获取它们.public class PropertiesUtil extends PropertyPlaceholderConfigurer {private static Map properties new HashMap();Overrideprotected void loadProperties(final Properties props) throws IOExcepti…

plsql 为空显示 0 的函数_不加班只加薪!从0到1教你制作出入库进销存表格

出入库表应用十分广泛&#xff0c;是每个公司都用到的表格&#xff0c;下面我们来看看怎么从一张空白表一步一步实现《出入库表》的制作&#xff0c;目的是做到只需要记录出库入库流水&#xff0c;自动对库存及累计出入库数量进行计算、实时统计。出入库表构成做一个出入库表&a…

eShopOnContainers学习系列(一):Swagger的使用

最近在看eShopOnContainer项目&#xff0c;抽取一下其中的基础知识点&#xff0c;做个记录&#xff0c;有兴趣的可以看下。 新建一个.net core API项目&#xff0c;添加Nuget包 Swashbuckle.AspNetCore.SwaggerGen、Swashbuckle.AspNetCore.SwaggerUI&#xff1a; 然后在启动文…

结合WebSocket编写WebGL综合场景示例

在WebGL场景中导入多个Babylon骨骼模型&#xff0c;在局域网用WebSocket实现多用户交互控制。 首先是场景截图&#xff1a; 上图在场景中导入一个Babylon骨骼模型&#xff0c;使用asdw、空格、鼠标控制加速度移动&#xff0c;在移动时播放骨骼动画。 上图在场景中加入更多的骨…