CF1737D Ela and the Wiring Wizard
CF1737D Ela and the Wiring Wizard
题意简述
形象化的,对于一个边,我们可以做以下变换:
将一条边变为自环

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

总的来说,就是边的两个端点可以自由移动
解释一下样例三:
$ (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/n\)
\(cnt=\min(dis_{x,1}+dis_{y,n},dis_{y,1}+dis_{x,n})\)
其中一个端点先走到某一个中间点 \(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的更多相关文章
- [题解] Codeforces Dytechlab Cup 2022 1737 A B C D E 题解
傻*Dytechlab还我rating!(不过目前rating还没加上去,据说E是偷的说不定要unrated) 实在没预料到会打成这样... 求点赞 点我看题 A. Ela Sorting Books ...
- salesforce 零基础学习(六十)Wizard样式创建数据
项目中表之间关联关系特别多,比如三个表中A,B,C C作为主表,A,B作为从表,有时候C表需要创建数据时,同时需要创建A,B两个表的数据,这种情况下,使用Wizard样式会更加友好. 以Goods_ ...
- Wizard Framework:一个自己开发的基于Windows Forms的向导开发框架
最近因项目需要,我自己设计开发了一个基于Windows Forms的向导开发框架,目前我已经将其开源,并发布了一个NuGet安装包.比较囧的一件事是,当我发布了NuGet安装包以后,发现原来已经有一个 ...
- Windows 10 IoT Serials 3 - Windows 10 IoT Core Ardunio Wiring Mode
Maker社区和智能硬件的朋友一定知道Arduino,很多3D打印机都是用它做的.为了迎合这一大块市场,微软在基于Intel Galileo的Windows 8.1 IoT中就是使用这种基于Ardui ...
- 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 ...
- Fuel UX wizard example
<!DOCTYPE html> <html class="no-js fuelux"> <head> <meta charset=&quo ...
- PCI Express(五) - Xilinx wizard
原文地址:http://www.fpga4fun.com/PCI-Express5.html Xilinx makes using PCI express easy - they provide a ...
- arduino编程语言Wiring参考手册API
对Arduino的编程是利用 Arduino编程语言 (基于 Wiring)和Arduino开发环境(based on Processing)来实现的. 通过编程,Arduino可以实现很多种功能. ...
- 转:安装MySQL遇到MySQL Server Instance Configuration Wizard未响应的解决办法
问题:安装了MySQL之后进入配置界面的时候,总会显示“MySQL Server Instance Configuration Wizard未响应”,一直卡死. 解决办法:Win7系统中,以管理员的权 ...
- 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 ...
随机推荐
- 读博期间的宿舍 && 行李打包 —— 大连开发区校区
=============================================
- Chrome(Google) 浏览器安装Vue2、Vue3插件方法 (亲测有效)
1.背景 2.步骤 步骤一:下载插件 网站:https://chrome.zzzmh.cn/#/search 百度网盘下载: 链接:https://pan.baidu.com/s/1xdEK-7qVx ...
- 圆方树学习笔记 & 最短路 题解
前言 圆方树学习笔记,从一道例题讲起. 题目链接:Hydro & bzoj. 题意简述 仙人掌上求两点距离. 题目分析 为了把仙人掌的性质发挥出来,考虑将其变成一棵树.圆方树就是这样转换的工具 ...
- Headless靶机笔记
Headless靶机 靶机概述 Headless 是一款简单易难的 Linux 机器,具有python实现的托管网站的服务器.基本思路: 通过端口探测到web页面,有一个表单. 利用忙注XSS,获得管 ...
- 瑞芯微-I2S | 音频驱动调试基本命令和工具-基于rk3568-2
基于Linux嵌入式设备常用调试方法很多,本文一口君把调试语音用到的工具和方法给大家做一个简单的介绍. 1. procfs.sysfs Linux系统上的/proc目录是一种文件系统,即proc文件系 ...
- 电子行业MES系统流程图梳理
- 解决 Rust WebAssembly 启动 Web 程序报错
当你艰难入门 Rust ,并满怀斗志准备投身 WebAssembly,第一课也许会先给你泼盆凉水. 跟随 <Rust 和 WebAssembly> 文档的指引,一路 install.cod ...
- Poetry 使用
Poetry 是当下热门的 Python 包管理器.Poetry 注重为项目提供完整的生命周期管理,包括构建.打包.发布和依赖管理.其使用 pyproject.toml 文件来管理项目的依赖和构建配置 ...
- elastersearch7.6.1搭建及基本操作详解
搭建 修改系统参数 vim /etc/security/limits.conf * soft nofile 655350 * hard nofile 655350 * soft nofile 6553 ...
- vue 报错 Component template should contain exactly one root element. If you are using v-if on multiple elements
vue 报错 Component template should contain exactly one root element. If you are using v-if on multiple ...