BZOJ 2395 [Balkan 2011]Time is money_weixin_30326515的博客-程序员秘密

题面

题解

\(\sum_i c_i\)\(\sum_i t_i\)分别看做分别看做\(x\)\(y\),投射到平面直角坐标系中,于是就是找\(xy\)最小的点

于是可以先找出\(x\)最小的点\(\mathrm{A}\)\(y\)最小的点\(\mathrm{B}\),然后找到在\(\mathrm{AB}\)左下方的最远的点\(\mathrm{C}\),如图所示:

5c6bb9bf533ea.png

\(\overrightarrow{\mathrm{AB}} \times \overrightarrow{\mathrm{AC}}\)最小(因为\(\overrightarrow{\mathrm{AB}} \times \overrightarrow{\mathrm{AC}} \leq 0\)
\[ \begin{aligned} \because \overrightarrow{\mathrm{AB}} \times \overrightarrow{\mathrm{AC}} &= (x_{\mathrm{B}} - x_{\mathrm{A}})(y_{\mathrm{C}} - y_{\mathrm{A}}) - (y_{\mathrm{B}} - y_{\mathrm{A}})(x_\mathrm{C} - x_\mathrm{A}) \\ &= (x_\mathrm B - x_\mathrm A) \times y_\mathrm C + (y_\mathrm A - y_\mathrm B) \times x_\mathrm C + y_\mathrm B x_\mathrm A - x_\mathrm B y_\mathrm A \end{aligned} \]
然后发现只要\((x_\mathrm B - x_\mathrm A) \times y_\mathrm C + (y_\mathrm A - y_\mathrm B) \times x_\mathrm C\)最小即可。

将每条边的权值改为\(\mathrm{g}[i][j] = (y_\mathrm A - y_\mathrm B) \times c[i][j] + (x_\mathrm B - x_\mathrm A)\times t[i][j]\),跑一遍最小生成树就可以得出答案了。

找到\(\mathrm C\)之后用叉积判断一下\(\mathrm C\)是不是在\(\mathrm{AB}\)的下方,如果是的话,就递归处理\(\mathrm{AC, CB}\)

复杂度?O(能过)

因为\(\mathrm{A, B, C}\)肯定在凸包上,又\(n\)个点的凸包期望点数为\(\sqrt{\ln n}\)

于是复杂度为\(\mathrm{O}(\sqrt{\ln n!} \times n^2)\)或者\(\mathrm{O}(\sqrt{\ln n!} \times m\log m)\)

代码

#include<cstdio>
#include<cctype>
#include<algorithm>
#define RG register

const int N(210), INF(1e9);
struct vector { int x, y; };
vector ans = (vector) {INF, INF};
inline vector operator - (const vector &lhs, const vector &rhs)
    { return (vector) {lhs.x - rhs.x, lhs.y - rhs.y}; }
inline int operator * (const vector &lhs, const vector &rhs)
    { return lhs.x * rhs.y - lhs.y * rhs.x; }
int g[N][N], f[N][N], dis[N], c[N][N], t[N][N], cdis[N], tdis[N], vis[N], n, m;

vector prim(int valx, int valy)
{
    for(RG int i = 1; i <= n; i++)
        for(RG int j = 1; j <= n; j++)
            if(f[i][j]) g[i][j] = valx * c[i][j] + valy * t[i][j];
    std::fill(dis + 1, dis + n + 1, INF);
    std::fill(vis + 1, vis + n + 1, 0);
    dis[1] = cdis[1] = tdis[1] = 0;
    vector res = (vector) {0, 0};
    for(RG int i = 1; i <= n; i++)
    {
        int _min = INF, x = -1;
        for(RG int j = 1; j <= n; j++)
            if(_min > dis[j] && (!vis[j])) _min = dis[j], x = j;
        if(_min == INF) break; vis[x] = 1;
        res.x += cdis[x], res.y += tdis[x];
        for(RG int j = 1; j <= n; j++) if(f[x][j])
            if(dis[j] > g[x][j]) dis[j] = g[x][j],
                cdis[j] = c[x][j], tdis[j] = t[x][j];
    }
    long long sum = 1ll * res.x * res.y, _min = 1ll * ans.x * ans.y;
    if(sum < _min || (sum == _min && res.x < ans.x)) ans = res;
    return res;
}

void solve(const vector &A, const vector &B)
{
    vector C = prim(A.y - B.y, B.x - A.x);
    if((B - A) * (C - A) >= 0) return;
    solve(A, C); solve(C, B);
}

int main()
{
    scanf("%d%d", &n, &m);
    for(RG int i = 1, x, y, _c, _t; i <= m; i++)
        scanf("%d%d%d%d", &x, &y, &_c, &_t), ++x, ++y,
        c[x][y] = c[y][x] = _c, t[x][y] = t[y][x] = _t,
        f[x][y] = f[y][x] = 1;
    vector A = prim(1, 0), B = prim(0, 1);
    solve(A, B); printf("%d %d\n", ans.x, ans.y);
    return 0;
}

转载于:https://www.cnblogs.com/cj-xxz/p/10401868.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30326515/article/details/99661400

智能推荐

windows下安装weblogic开发版_陈某1987的博客-程序员秘密

1、下载weblogic12.1.3开发版   下载地址是:http://download.oracle.com/otn/nt/middleware/12c/wls/1213/wls1213_dev.zip?AuthParam=1473242241_59cf4df5ac3887e3b87a15b5f1f15899    解压到某个目录:   2、配置环境变量

vnc 端口修改、用户添加删除、批量启动停止_weixin_34187862的博客-程序员秘密

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

数据库(database)_trdb数据库_qq_3197644270的博客-程序员秘密

一、数据库的发展史   (1)手工管理:藏书阁,图书馆。            优点:分类管理,直观性强        缺点:信息流动慢,不方便   (2)文件管理:计算机文件系统,图书管理系统            优点:分类管理,层次分明        缺点: 查找不方便   (3)数据库管理:            优点:存取数据非常方便.        缺点:有数据的安全...

Arduino ESP32 Web网页控制RGB灯_esp32 web控制_perseverance52的博客-程序员秘密

Arduino ESP32 Web网页控制彩色LEDESP32 LED PWM控制器具有16个独立通道,可配置为生成具有不同属性的PWM信号。 我们可以使用ESP32的LED PWM控制器和零知开发工具对LED进行调光。连线:1、红色引脚连接到ESP32的GPIO252、绿色引脚连接到ESP32的GPIO263、蓝色引脚连接到ESP32的GPIO27实例代码 // the number of the LED pin const int ledPin = 16; //

静态链接和动态链接的区别_dongfengkuayue的博客-程序员秘密

静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。  静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生

Cesium|xt3d水球图)_xt3d的博客-程序员秘密

Cesium|xt3d水球图效果代码预览地址效果代码 &lt;!DOCTYPE html&gt;&lt;html lang="zh-CN"&gt;&lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt; &lt;meta http-equiv="X-UA-Compatible" content

随便推点

Android L日志系统2——JavaAPI与liblog_可夫小子的博客-程序员秘密

在 Android L(包含Android L)之后,Andoird使用了全新的日志系统,也非之前结合Kernel Ring Buffer的方式来存储,读写Log。替而代之是使用新的日志机制Logd。所以说,在/dev/log/下面创建的几个设备,根本就没有使用!没有使用! 其实,init在创建它们的时候,就有说明,只是没有注意到了。 INFO("kernel logger is deprec

SpringCloud使用Feign拦截器实现URL过滤和RequestParam加密_changdanzhui5921的博客-程序员秘密

一、FeignInterceptor.class拦截器package com.xiaohang.socialcard.pre.intercepter;import com.xiaohang.socialcard.pre.utils.SM4Util;import feign.RequestInterceptor;import feign.RequestTemplate;import lo...

Revit二次开发-获取链接目录树_Youngala的博客-程序员秘密

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

剑指offer_11 二进制中1的个数_代码裁缝纳兰的博客-程序员秘密

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:首先想到的是和1与然后右移,但容易出现死循环,比如说负数。右移如果是无符号整数,则右移几位左边补几个0,如果是有符号整数,如果为正数,则右移几位就补几个0,;如果为负数,则右移几位左边就补几个1;因此右移不可取;如果是左移的话,不输入n,对n的最低位进行判断,flag=1, n

vscode c#中nuget安装与问题处理_vscode还原nuget_叫我腾飞的博客-程序员秘密

nuget错误如果出现一下提示Versioning information could not be retrieved from the NuGet package repository. Please try again later.在VSCODE 目录下搜索fetchPackageVersions.js文件一般存放在这里 C:\Users\Administrator.vscode\extensions\jmrog.vscode-nuget-package-manager-1.1.6\out\s

[转]awesome-tensorflow-chinese_weixin_33975951的博客-程序员秘密

模型项目Domain Transfer Network - Implementation of Unsupervised Cross-Domain Image GenerationShow, Attend and Tell - Attention Based Image Caption GeneratorNeural Style Implementation of Neural Style...