CF1737D Ela and the Wiring Wizard

题意简述

形象化的,对于一个边,我们可以做以下变换:

  1. 将一条边变为自环

  2. 将边的一个端点沿着其他边移动

总的来说,就是边的两个端点可以自由移动

解释一下样例三:

$ (2,5),w=22\to(2,6),w=22\to(6,6),w=22\to(6,4),w=22\to(6,8),w=22\to(8,7),w=22\to(1,8),w=22 $

经过了 \(6\) 次变化,使得 \((1,8)\) 之间有连边,长度为 \(22\) ,最后走这条边,时间为 \(22\times7=154\)

思路

提出一个猜想:最小花费方案中,必然有一种是将一条边移动到 \(1,n\) 之间,然后走这条边。

证明的话(不会),感性理解就好了(我也是看样例猜出来的)

于是问题转化:考虑每一条边,求将其移动到 \(1,n\) 两边的最小走多少步 \(cnt\) 。我们求得便是 \(\min(w_i*(cnt+1))\)

对于一条边 \((x,y)\)

  1. 其端点自己直接走到 \(1/n\)

    \(cnt=\min(dis_{x,1}+dis_{y,n},dis_{y,1}+dis_{x,n})\)

  2. 其中一个端点先走到某一个中间点 \(s\) ,然后将另一个端点通过变换一接过来,再走去 \(1/n\)

    \(cnt=\min(dis_{x,s},dis_{y,s})+dis_{1,s}+dis_{s,n}+1\)

对于 \(dis\) 直接弗洛伊德就可以了

CODE

// #pragma GCC optimize("Ofast")
// #pragma GCC optimize("inline")
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef long double ld;
const ll maxn=500+2; inline ll read_int(){
ll a=0;bool f=0;char g=getchar();
while(g<'0'||g>'9') {if(g=='-') f=1;g=getchar();}
while('0'<=g&&g<='9') a=a*10+g-'0',g=getchar();
return f ? -a : a;
} inline void write(ll a,bool f=1){
char lin[40];ll top=0;
if(a<0) a=-a,putchar('-');
while(a) lin[++top]=a%10+'0',a/=10;
if(!top) lin[++top]='0';
while(top) putchar(lin[top--]);
if(f) putchar('\n');
} int n,m; int mapp[maxn][maxn];
struct E{int f,t;ll v;}edge[maxn*maxn]; inline void read(){
n=read_int(),m=read_int();
memset(mapp,0x3f,sizeof mapp);
for(int i=1;i<=n;i++) mapp[i][i]=0;
for(int i=1;i<=m;i++){
edge[i].f=read_int(),edge[i].t=read_int(),edge[i].v=read_int();
mapp[edge[i].t][edge[i].f]=mapp[edge[i].f][edge[i].t]=1;
}
for(int i=1;i<=n;i++){
for(int e=1;e<=n;e++){
for(int j=1;j<=n;j++){
mapp[e][j]=min(mapp[e][i]+mapp[i][j],mapp[e][j]);
}
}
}
ll ans=1e18;
for(int i=1;i<=m;i++){
int lin=min(mapp[edge[i].f][1]+mapp[edge[i].t][n],mapp[edge[i].f][n]+mapp[edge[i].t][1]);
for(int e=1;e<=n;e++){
lin=min(lin,min(
mapp[edge[i].f][e],mapp[edge[i].t][e]
)+mapp[e][1]+mapp[e][n]+1);
}
lin++;
ans=min(ans,lin*edge[i].v);
}
write(ans);
} int main (){
// freopen(".in","r",stdin);
int T=read_int();
while(T--) read();
}

CF1737D Ela and the Wiring Wizard的更多相关文章

  1. [题解] Codeforces Dytechlab Cup 2022 1737 A B C D E 题解

    傻*Dytechlab还我rating!(不过目前rating还没加上去,据说E是偷的说不定要unrated) 实在没预料到会打成这样... 求点赞 点我看题 A. Ela Sorting Books ...

  2. salesforce 零基础学习(六十)Wizard样式创建数据

    项目中表之间关联关系特别多,比如三个表中A,B,C  C作为主表,A,B作为从表,有时候C表需要创建数据时,同时需要创建A,B两个表的数据,这种情况下,使用Wizard样式会更加友好. 以Goods_ ...

  3. Wizard Framework:一个自己开发的基于Windows Forms的向导开发框架

    最近因项目需要,我自己设计开发了一个基于Windows Forms的向导开发框架,目前我已经将其开源,并发布了一个NuGet安装包.比较囧的一件事是,当我发布了NuGet安装包以后,发现原来已经有一个 ...

  4. Windows 10 IoT Serials 3 - Windows 10 IoT Core Ardunio Wiring Mode

    Maker社区和智能硬件的朋友一定知道Arduino,很多3D打印机都是用它做的.为了迎合这一大块市场,微软在基于Intel Galileo的Windows 8.1 IoT中就是使用这种基于Ardui ...

  5. SharePoint Configuration Wizard - Unable to upgrade SharePoint Products and Technologies because an upgrade is already in progress

    故障描述 当要运行SharePonit Products and Technologies Configuration Wizard的时候,出现了如下图所示的错误提示. 错误信息为: Unable t ...

  6. Fuel UX wizard example

    <!DOCTYPE html> <html class="no-js fuelux"> <head> <meta charset=&quo ...

  7. PCI Express(五) - Xilinx wizard

    原文地址:http://www.fpga4fun.com/PCI-Express5.html Xilinx makes using PCI express easy - they provide a ...

  8. arduino编程语言Wiring参考手册API

    对Arduino的编程是利用 Arduino编程语言 (基于 Wiring)和Arduino开发环境(based on Processing)来实现的. 通过编程,Arduino可以实现很多种功能. ...

  9. 转:安装MySQL遇到MySQL Server Instance Configuration Wizard未响应的解决办法

    问题:安装了MySQL之后进入配置界面的时候,总会显示“MySQL Server Instance Configuration Wizard未响应”,一直卡死. 解决办法:Win7系统中,以管理员的权 ...

  10. Cocos2d-x Application Wizard for Visual Studio User Guide

    0. Overview Cocos2d-x-win32's project can be generated by Wizard. Wizard supports Visual Studio 2008 ...

随机推荐

  1. 【转载】 自然梯度法(Natural Gradient)

    原文地址: https://blog.csdn.net/philthinker/article/details/80615122 ----------------------------------- ...

  2. python报错:Pip 20.3+ break proxy connection

    参考: https://www.cnblogs.com/devilmaycry812839668/p/17872452.html =================================== ...

  3. 在Ubuntu18.04系统中源码安装 gcc7.3.0

    本文给出源码安装gcc7.3.0的方法. 依赖的环境安装到自建文件夹下, 给出下面操作中环境的安装文件夹: /home/devilmaycry/anaconda3/mindspore_envs这个路径 ...

  4. 如果一个windows主机上插两个蓝牙适配器会如何???——由于 Windows 无法加载这个设备所需的驱动程序,导致这个设备工作异常。 (代码 31)——windows主机蓝牙适配器驱动错误排查

    事情是这样的,在某鱼上挂了一个蓝牙适配器,是自己多年前买的,给自己的老电脑用的,那一台老电脑主板上没有自带蓝牙,于是就在某东上买了一个蓝牙适配器: 但是这几年新买的电脑都自带蓝牙,于是准备把这个适配器 ...

  5. ubuntu系统grub修复(win+ubuntu双系统环境),修复无法启动问题 boot-repair

    相关: https://help.ubuntu.com/community/Boot-Repair ================================================== ...

  6. UE4打包后的游戏,无法打卡其他关卡的解决办法

    现象: 程序调试的时候可以通过主菜单打开其他关卡界面,但是打包之后就无法通过按钮打开,一直显示错误 Warning: Travel Failure: [ClientTravelFailure]: Fa ...

  7. grpc报错合集以及解决方案

    这里介绍下grpc各种报错以及解决方案 io.grpc.StatusRuntimeException: UNIMPLEMENTED 这个错误网上很多,大部分情况下 是由于方法找不到,即客户端与服务端p ...

  8. Blazor开发框架Known-V2.0.9

    V2.0.9 Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行.本次版本主要是修复一些BUG和表格页面功能增强. 官网:http://known.puma ...

  9. JAVA——instanceof运算符(问题待处理)

    2024/07/12 1.问题 2.问题拆解 3.解决 1.问题 今天学了一个运算符--instanceof,概念很抽象,感觉暂时理解不了,什么实例对象.类.子类,看得迷迷糊糊的,先记录下来,有空做一 ...

  10. JDBC,SQL注入,事务,C3P0于Druid连接池(最详细解析)

    JDBC JDBC(Java DataBase Connectivty,Java数据库连接)API,是一种用于执行Sql语句的Java API,可以为关系型数据库提供统一的访问,其由一组Java编写的 ...