【PA2012】Tax (最短路)

使用trae自动生成前后端分离的web应用程序 使用ai自动生成前后端分离的web应用程序 阅读详情

Description

The king of Byteland decided to follow a worldwide trend and introduce taxes everywhere he can. His new invention is the so-called travel tax that is paid by everyone travelling through the country.

Each Bytean road is assigned a tax rate. When passing through a town one needs to pay a tax that equals the maximum of the tax rate on the road that was used to enter the town and of the tax rate on the road that was used to exit the town. One also pays the tax in the first and the last town on the trip: there the tax amount equals the rate of the only corresponding road of the trip.

Your friend Byteasar is going for a trip from Bytetown to Bitcity. Help him plan his trip so that the amount of tax he pays is minimal.

Translation

给定一个n个点m条边的无向图,定义经过一个点的代价为进入该点的边和离开该点的边的边权的最大值,特别的,对于起点和终点,代价为进入或离开该点的边的边权,求从1走到n的最小代价。

Input

第一行:两个整数n,m
接下来m行:每行3个整数u,v,w,描述一条连接u,v,费用为w的边

Output

一个整数,即1到n的最小距离

SampleInput

4 5
1 2 5
1 3 2
2 3 1
2 4 4
3 4 8

SampleOutput

12

Solution

因为图G的权值在点上,如果想用常规的最短路算法解决本题,可以构建一张新图G’,使G’中的点对应G中 的边,边对应G中的点。

由于一个点的权值取决于入边和出边的最大值,对于G中每个入边e以及出边e’,在G’中向与其对应p和p’连一条边,费用为两者的最大值。

这样新图中的总边数为m2,不能通过所有数据点。

结合点的权值取决于入边和出边的最大值的性质,可以利用差分思想降低总边数:

1.将原图中的一点的入边和出边按照权值分别从小到大排序

2.对于原图中的ei,即新图中的pi,向pi+1连一条费用为二者之差的边,再从pi+1向pi连一条费用为0的边

3.对于每个pi,向权值比它大的最小的pi′连一条边,费用为pi′的权值,再从权值比pi小的最大的pi′向pi连一条边,费用为pi的费用

这样建图的效果是:倘若出边的费用小于入边,则费用就取决于入边,因为新图中权值大的点通向权值小的点是免费的,反之则需要通过差额补足,总边数便降到m级别。

Code

#include <queue>
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;
typedef long long ll;

const int MAXN=4e5+10;
const int MAXM=4e6+10;

int n,m,S,T;

ll dis[MAXN];
int head[MAXN],tot;
struct edge{int to,nxt; ll c;}e[MAXM];

int pn;
struct point{
    int from,to,id; ll c;
    point(){}
    point(int u,int v,int pi,ll cost){from=u; to=v; id=pi; c=cost;}
    bool operator < (const point &rhs)const{return c<rhs.c;}
};

vector<point> P[MAXM];

struct data{
    int id; ll d;
    data(){}
    data(int v,ll dist){id=v; d=dist;}
    bool operator < (const data &rhs)const{return d>rhs.d;}
};

priority_queue<data> Q;

int Getint(){
    char ch; while(!isdigit(ch=getchar())); int v=ch-48;
    while(isdigit(ch=getchar())) v=(v<<3)+(v<<1)+ch-48;
    return v;
}

void Insert(int u,int v,ll cost){
    e[++tot].to=v; e[tot].c=cost;
    e[tot].nxt=head[u]; head[u]=tot;
}

ll Dijkstra(){
    memset(dis,0x7F,sizeof dis);
    dis[S]=0; Q.push(data(S,0));
    while(!Q.empty()){
        data now=Q.top(); Q.pop();
        if(now.d!=dis[now.id]) continue;
        if(now.id==T) return dis[T];
        for(int i=head[now.id];i;i=e[i].nxt){
            if(dis[e[i].to]>dis[now.id]+e[i].c){
                dis[e[i].to]=dis[now.id]+e[i].c;
                Q.push(data(e[i].to,dis[e[i].to]));
            }
        }
    }
}

int main(){
    int u,v,len,pos,size; ll cost;
    n=Getint(); m=Getint();
    for(int i=1;i<=m;i++){
        u=Getint(); v=Getint(); cost=Getint();
        P[u].push_back(point(u,v,++pn,cost));
        P[v].push_back(point(v,u,++pn,cost));
    }
    T=pn+1;
    for(int i=1;i<=n;i++){
        sort(P[i].begin(),P[i].end());
        len=P[i].size();
        for(int j=1;j<len;j++){
            Insert(P[i][j].id,P[i][j-1].id,0);
            Insert(P[i][j-1].id,P[i][j].id,P[i][j].c-P[i][j-1].c);
        }
    }
    for(int i=1;i<=n;i++){
        len=P[i].size();
        for(int j=0;j<len;j++){
            v=P[i][j].to; size=P[v].size();
            pos=lower_bound(P[v].begin(),P[v].end(),P[i][j])-P[v].begin();
            if(pos>0) Insert(P[i][j].id,P[v][pos-1].id,P[i][j].c);
            if(pos<size) Insert(P[i][j].id,P[v][pos].id,P[v][pos].c);
        }
    }
    len=P[1].size();
    for(int i=0;i<len;i++) Insert(S,P[1][i].id,P[1][i].c);
    len=P[n].size();
    for(int i=0;i<len;i++) Insert(P[n][i].id,T,0);
    printf("%lld\n",Dijkstra());
    return 0;
}
一文搞定学术英语写作 (斯坦福SCI论文写作课程笔记) 0.前言: 本文基于斯坦福Kristin Sainani 教授的学术论文写作公开课——SCI论文写作(Writing in the Sciences)。在此基础上进行章节顺序的重排及部分内容的删减,以方便第一次进行英语学术论文写作的同学快速上手。 时间充足和想要系统学习英文学术写作的同学,十分建议观看完整课程视频,一定会受益匪浅!课程地址如下: 课程B站地址:https://www.bilibili.com/video/BV1zv41177JQ 1.论... 阅读详情

相关推荐

中国 it 集成商 主要有哪些 主要做什么工作

既要懂技术(云计算/AI),又要吃透行业(金融/政务)。:用国产化方案(麒麟OS+达梦数据库)替换Oracle/Windows。:如为银行搭建数据中心(采购华为服务器+思科交换机)。:数据中心监控、故障处理(如华胜天成服务国家电网)。:核心交易系统(如中科软为保险公司开发精算平台)。:智慧城市(如太极股份承建“一网通办”政务平台)。:HIS医院信息系统(如东华软件的电子病历系统)。:硬件透明化(如服务器价格战)压缩集成毛利。:工厂设备联网(新华三的工业互联网平台)。

hxsln11的博客 3037

最短路题

340. 通信线路 题意: 给定n个点m条边的无向图,边有边权。 你可以指定一条从点1到点n的路径,最多将k条边的权值变为0,然后这条路径的代价为路径上剩余边的最大边权。 问从1到n的最小花费是多少,如果1无法到达n则输出-1 数据范围:n,k<=1e3,m<=1e4 解法: 分层图最短路 code: #include<bits/stdc++.h> using namespace std; #define int long long const int N=1e3+5; const.

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 572

LSCM最小二乘保角参数化

LSCM最小二乘保角参数化 最小二乘思想 已知一组点的数据(x,y) x x1x_1x1​ x2x_2x2​ x3x_3x3​ … xnx_nxn​ y y1y_1y1​ y2y_2y2​ y3y_3y3​ … yny_nyn​ 可以近似为线性关系 y=ax+by=ax+by=ax+b ,目标为确定常数 aaa , bbb ; 解法:找到 aaa , bbb ,使得所有 yiy_iyi​ 与 axi+bax_i+baxi​+b 偏差的平方和 Q=∑i=1n(yi−axi−b)2 Q=\s

weixin_49732532的博客 4252

ACM学习:最短路相关总结

本周主要学习了最短路的相关知识,28道题,大部分都有思路,在根据题解帮助排除误区后A了,一两道由于题目没懂没A。在解题过程中,更全面的了解了最短路径的四种算法。 一.例题解析 最短路径的题大多都是直接给出起点和终点,让我们根据所给数据组成最短路径。而根据题目的具体要求不同,一般用以下四种方法解答: Dijstra算法:常用于单源最短路径的解决,是最常用的方法之一,但是,它虽然简单,却有一些弊端,因此在做题时,常常根据题目需求进行优化,常用的有堆优化等;(但是,有一个缺陷没法弥补,即无法计算有负权值..

qq_62906846的博客 661

SAR ADC和sigma delta ADC的区别

0、ADC基本概念 ADC,即analog to digital converter,模拟到数字的转换器,简称模数转换器。 为什么需要ADC?因为现实的世界中,电信号是连续的,例如心电信号,或者声音信号,这些连续的信号被称为“模拟信号”。 图1:心电信号 图2:声音信号 然而这种连续的信号是无法被计算机处理的,计算机只认识0和1组成的“数字信号“。ADC就充当了这样一个桥梁,将“模拟信号”转换为计算机能识别的“数字信号”。举个例子,当前的心电电压为1.2V(实际没有这么高),ADC可能会得

长河柱天的博客 2万+

30分钟搭建AI科研写作工作台:基于WorkBuddy的论文全流程加速实践

在人工智能技术日益普及的今天,如何利用智能工具提升专业领域工作效率成为关键课题。其核心原理在于通过模块化设计,将复杂的任务流程拆解为可复用、可编排的标准化技能单元,并结合精准的指令控制,实现从通用对话到深度任务执行的转变。这一技术价值在于显著降低重复性劳动强度,将人的创造力聚焦于核心决策与创新环节。在科研写作、数据分析、代码开发等场景中,这类智能工作台能有效辅助完成文献调研、内容生成、格式校验等繁琐步骤。本文以科研论文写作为具体应用场景,深入探讨如何利用WorkBuddy这一智能工作台,通过配置核心科研技能

weixin_29032489的博客 1497

[PA2012] Tax

传送门:>Here< 题意:给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价。起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权N<=100000M<=200000 解题思路 不免要吐槽一下这题的数据,久调一下午无果与标程对拍没有任何差错不知道为什么就是WA既然极限数据已经和标程...

weixin_30781631的博客 256

STM32F407+LAN8720A+LwIP实战:FreeModbus TCP从机功能开发指南

本文详细介绍了基于STM32F407和LAN8720A硬件平台,结合LwIP协议栈实现FreeModbus TCP从机功能的开发指南。内容涵盖硬件连接、LwIP移植、FreeModbus TCP从机实现、任务调度及调试技巧,为工业控制领域的以太网通信开发提供实用参考。

weixin_29190651的博客 546

[BZOJ4289]PA2012 Tax 差分建图+最短路

这是一个不寻常的最短路,走一步的代价是两条边权值的最大值,听起来就很难维护。 重新建图,把点建到边上,这样走一步就相当于两个点权值的最大值,是可以用普通的最短路算法做的,点数是O(m)O(m),但是边数最坏会达到O(m2)O(m^2) 解决方法是继续改造这个图,可以使用线段树建图,不过直接差分建图也会很方便。 将无向边拆成两条有向边,把边变成点后这两条边连一条长度为0的路径,对于原图来自同一个

HbFS- 687

【AI 编程工具】Codex配置部署指南

目录一、环境准备与基础安装1. 系统兼容性检查2. 前置依赖安装3. 安装方式选择二、API密钥配置与认证1. 获取API密钥2. 配置文件设置3. 临时配置方式三、沙盒环境配置与安全策略1. 沙盒模式选择2. 安全最佳实践四、高级功能配置1. 模型上下文协议(MCP)配置2. 模型版本切换3. 自定义网关配置五、常见问题排查1. 安装失败2. API调用失败3. 处理速度慢4. 配置文件不生效六、生产环境部署建议macOS/Linux:官方提供稳定支持,推荐使用原生环境Windows:官方标注为实验性支持

以实战经验介绍行业知识 2893

【局部规划模块轨迹优化算法】EM_planner最大期望滚动优化算法

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对EM_planner最大期望滚动优化算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 760

[bzoj4289]PA2012 Tax

4289: PA2012 Tax Time Limit: 10 Sec Memory Limit: 128 MB Submit: 996 Solved: 299 [Submit][Status][Discuss] Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价。起点的代价是离开起点的边的边权,...

Gzb1128的栖息地 389

基于lstm+gru+transformer的电池寿命预测健康状态预测-完整数据代码

基于lstm+gru+transformer的电池寿命预测健康状态预测-完整数据代码

881

bzoj 4289: PA2012 Tax 最短路

QAQ手写堆好慢。。。        把一条边拆成两条,然后把边看成新的图中的点。然后考虑原图中的点x的入边和出边,显然每一条入边在原图中对应一条出边,在新图的这两个新点上连边为原图边权;然后由于一个点的点权为它出边和入边的较大值,考虑对x的出边排序后,相邻两条小的向大的连边权为原图边权差值,大的向小的连边权为0。        然后处理一下源点和汇点即可。。        不是很清楚SPF

lych的博客 1566

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

P6822 [PA2012]Tax 最短路变形

题面: 给出一个 nnn 个点 mmm 条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点 1 到点 nnn 的最小代价。起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权。 范围&性质:1≤n≤105,1≤m≤2×1051\le n\le 10^5,1\le m\le 2\times 10^51≤n≤105,1≤m≤2×105 分析: 暴力做法: 由于图的权值在点上,所以考虑建一张新的图,将点权化作边权,任意两边之间连一条新的边,最劣情况下空间复杂度会达到

youth518的博客 181

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【PA2012】Tax 题解(最短路)

Description The king of Byteland decided to follow a worldwide trend and introduce taxes everywhere he can. His new invention is the so-called travel tax that is paid by everyone travelling through th...

weixin_34221332的博客 235

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

[BZOJ4289][PA2012]Tax(最短路)

为啥那么多人喜欢看BSGS啊。。ATP那个写BSGS的文章访问量高的吓人啊。。

ADP+Pi==ATP 902

[BZOJ4289][PA2012]TAX(最短路)

首先考虑一种暴力做法,为每条边拆成两条有向边,各建一个点。若某两条边有公共点,则在边所对应的点之间连一条边,权值为两条边中的较大值。这样跑最短路是$O(m^2\log m)$的。 用类似网络流中补流的方法,一条边拆成的两个点之间连权值为边的原权值的边(第一种边)。对于一个点,将所有以它为起点的边排序,将相邻的两条边对应的点连边,小的往大的连权值为两条边的原权值差的边,大的往小的连权值为0的边(第...

weixin_30580943的博客 104

洛谷P6822 [PA2012]Tax(最短路+边变点)

洛谷P6822 [PA2012]Tax(最短路+边变点) 题意: 给出一个 n 个点 m 条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点 1到点 n 的最小代价。起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权。 思路: 暴力出奇迹,把所以的边看成点,若a->b,b>c,这将这两条边看成点连起来,最后建立超级源点S,于与1相连的点连起来,权值为0,建立超级汇点T,于与n相连的点连起来。共m^2条边。 考虑优化: 1.对于一个点,我们把它的出边从小到

weixin_45722843的博客 263

BZOJ4289 PA2012Tax(最短路)

  一个暴力的做法是把边看成点,之间的边权为两边的较大权值,最短路即可。但这样显然会被菊花图之类的卡掉。   考虑优化建图。将边拆成两个有向边,同样化边为点。原图中同一条边在新图中的两个点之间连边权为原边权的边。对于原图同一点的出边按权值从小到大排序,权值相邻的由小到大连边权为差值的边,由大到小连边权为0的边。这样就完成了取max的操作。加上超源超汇即可。 #include<iost...

weixin_30911451的博客 139

[差分建图 最短路] BZOJ4289: PA2012. Tax

大概套路就是把边看作点边边之间连边的话边数会被卡成 O(n2)O(n^2)把边sort一遍,可以用前缀和优化建图但是这样常数有点大…反正我是卡完内存卡时间然后发现可以差分…对于一个点,一条无向边拆成两条有向边,那么进去的边与对应的出去的边连0的边。把边sort一边后,这条边向它后面的边连一条边权大小为他们的差值的边,向它前面的边连边权大小为0的边。然后跑最短路就好了#include <cstdio>

CE玩家 692

【BZOJ 4289】PA2012 Tax(技巧建图最短路)

暴力做法:(30pts) 把每条无向边拆成两条有向边.把每条边看成一个点,对于两条从一个点出去的边 建两条有向边 边权为较大值 这样是m^2的 优化: 可以用类似差分的思想来 然后出边之间做差分 对出边的边权排序 然后相邻边之间连边(小边向大边连权值为两边权值之差的边,大边向小边连权值为0的边) 这样入边只需向他的对应边连一个权值为原边权的边即可达到去最大值的效果。 #include&l...

Android66666的博客 207

BZOJ 4289: PA2012 Tax 最短路 建图

4289: PA2012 Tax Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 677  Solved: 213 [Submit][Status][Discuss] Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价。起点的代价是离开起点的边的边

BlackJack 422

BZOJ 4289(PA2012 Tax-最短路)

给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价。起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权 N<=100000 M<=200000经典做法:把无向边拆成2条有向边(u,v,w)(u,v,w),边变点建图,(u,v,w1)(u,v,w_1)向(v,l,w2)(v,l,w_2)连max(w1,w2)max(w_1

nike0good |Oier&ACMer | 熟能生巧 445

BZOJ4289:PA2012 Tax-最短路-边化为点-难题

有任何问题欢迎留言或私聊 题目链接:BZOJ:4289: PA2012 Tax 题意: 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大 值,求从起点1到点N的最小代价。起点的代价是离开起点的边的边权,终点的代价是进入终 点的边的边权 N&amp;amp;lt;=100000 M&amp;amp;lt;=200000 思路: 看了大神的博客之后,感觉大千世界,无(san...

打过ICPC/CCPC,学习ACM算法,Linux内核,Openharmony,加油努力开心珍惜 555

[BZOJ4289] [PA2012] Tax 解题报告 (最短路+差分建图)

题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4289 4289: PA2012 Tax Time Limit:10 SecMemory Limit:128 MBSubmit:1029Solved:310[Submit][Status][Discuss] Description 给出一个N个点M条边的无向...

weixin_30945039的博客 167
上一篇: 【JOI Camp 2015】IOIO卡片占卜
4x10msv
博客等级 码龄10年 1粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值