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

重磅!Repo Wiki! RepoWiki是Qoder平台的智能文档生成功能,通过静态代码分析自动提取项目架构、模块依赖和核心逻辑,并持续追踪代码变更保持文档同步。其工作流程分为四个阶段:1)代码扫描与AST解析;2)结构分析与依赖映射;3)文档智能生成;4)增量更新机制。支持多种编程语言,能识别设计模式并推断技术决策,适用于新项目搭建和遗留系统维护。优势在于降低理解成本和提高开发效率,但存在文件数量限制和依赖Git的局限性。典型应用场景包括自动生成架构图、API手册和团队知识沉淀。 阅读详情

=== ===

这里放传送门

=== ===

题解

很容易想到化边为点然后如果两条边有公共点就连边,但是这样的话边数在极限情况下是 O(m2) 的显然不是很科学。。那么考虑如何减少边的数量。这里用到了一个比较常用的技巧就是利用差值转化。把每条边拆成两条有向边,这两条边之间连边权为原边权的边;然后对于每个点u,把所有从点u连出去的边排序,对于每两个相邻的边,从小的向大的连边权为差值的边,从大的向小的连边权为0的边,可以发现这样就可以满足边权取Max的限制。然后边数就压到了O(m)级别,用Dij+Heap就可以了。

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int n,m,tot,S,T,p[200010],a[400010],w[400010],next[400010],point[500010];
bool ext[500010];
const long long inf=1e18;
struct edge{
    int to,nxt;
    long long cst;
    void add(int x,int y,long long v){
        to=y;nxt=point[x];cst=v;point[x]=tot;
    }
}e[2000010];
struct Node{
    int pos;
    long long dis;
    bool operator < (const Node &a)const{
        return dis>a.dis;
    }
};
priority_queue<Node> q;
int comp(int x,int y){return w[x]<w[y];}
void add(int x,int y,int v){
    ++tot;a[tot]=y;next[tot]=p[x];p[x]=tot;w[tot]=v;
}
void Buildgraph(){
    int sor[400010],cnt;
    S=0;T=tot+1;
    cnt=tot;tot=0;
    for (int i=1;i<=cnt;i+=2){
        e[++tot].add(i,i+1,w[i]);
        e[++tot].add(i+1,i,w[i]);
    }
    tot=cnt;
    for (int i=1;i<=n;i++){
        cnt=0;
        for (int j=p[i];j!=0;j=next[j])
          sor[++cnt]=j;//把从点i连出去的边排序
        sort(sor+1,sor+cnt+1,comp);
        for (int j=1;j<cnt;j++){
            int x=sor[j],y=sor[j+1];
            e[++tot].add(x,y,w[y]-w[x]);//向比它大的边连边权为差值的边
            e[++tot].add(y,x,0);//向比它小的边连边权为0的边
        }
    }
    for (int i=p[1];i!=0;i=next[i])
      e[++tot].add(S,i,w[i]);
    for (int i=p[n];i!=0;i=next[i])
      e[++tot].add((i%2==0)?i-1:i+1,T,w[i]);   
/*  for (int i=S;i<=T;i++)
      for (int j=point[i];j!=0;j=e[j].nxt)
        printf("%d->%d %I64d\n",i,e[j].to,e[j].cst);*/
}
long long Dijkstra(int S,int T){
    long long ans=inf;
    Node now;
    now.pos=S;now.dis=0;
    q.push(now);
    while (!q.empty()){
        Node u=q.top();q.pop();
        if (ext[u.pos]==true) continue;
//      printf("%d\n",u);
        if (u.pos==T) return u.dis;
        for (int i=point[u.pos];i!=0;i=e[i].nxt)
          if (ext[e[i].to]==false){
              Node v;
              v.pos=e[i].to;
              v.dis=u.dis+e[i].cst;
              q.push(v);
          }
        ext[u.pos]=true;
    }
    return ans;
}
int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=m;i++){
        int x,y,v;
        scanf("%d%d%d",&x,&y,&v);
        add(x,y,v);add(y,x,v);
    }
    Buildgraph();
    printf("%lld\n",Dijkstra(S,T));
    return 0;
}
Python 爬虫进阶:爬取 APP 数据(Charles 抓包 + Requests) 本文详细介绍了APP数据爬取的完整技术方案。首先通过Charles抓包工具配置HTTPS代理和证书,解析APP通信协议;然后分析请求参数、反爬机制和动态签名生成规则;接着使用Python的Requests库实现模拟请求、分页爬取和数据存储;最后针对证书问题、Token失效等常见问题提供解决方案。文章强调抓包分析、参数逆向和请求模拟三大核心技术,同时提醒开发者需遵守法律法规,合理控制爬取频率。该方案适用于移动端数据采集场景,为无法直接获取网页数据的情况提供了有效解决方案。 阅读详情

相关推荐

大疆M3508电机使用CAN通信进行速度PID闭环控制详解

目录一. 简介二. 电机通信协议三. 电机PID控制原理四. 官方代码移植-中断接收五. 官方代码移植-查询接收 一. 简介 之前写过一篇文章STM32实现四驱小车(五)电机控制任务——电机速度PID控制算法,其中是以大疆的M3508电机为例进行讲解的(没错,就是RoboMaster机器人同款电机,不过Robomaster上的电机好像是小一号的M2006)。不少小伙伴私信问我要代码,我都回复说不是有官方demo么。后来问的人多了我大概明白了,看来官方的Demo还是有点门槛。可能是带FreeRTOS操作系统看

qq_30267617的博客 7万+

bzoj4289(神建图+最短路)

再学一个建图姿势。。 可以把边看成点,然后有公共点的边相互连边,跑最短路就可以了。。 然而菊花图会退化成m^2,需要再优化。。 把无向边拆成2个有向边,对每个点存入边和出边,然后出边之间做个差分,即对出边的边权排序,然后相邻边之间连边,小边向大边连权值为2边权值之差的边,大边向小边连权值为0的边,这样入边只需向他的对应边连一个权值为原边权的边即可达到去最大值的效果。 然后剩下起点和终点就直...

qkoqhh 631

自然二进制数与格雷码的相互转换

自然二进制数与格雷码两者优势: 自然二进制数的编码方式简单明了,容易理解,在加减运算中能够直接进行,同时十分方便进行一些位运算操作(如移位、取反等)。 格雷码计数时只有一位变化,可有效减少计数器状态的冗余转换,同时在传输数据时能够减小传输错误的概率,此外带权重编码处理更加方便。 在一定程度上自然二进制数与格雷码优缺点基本相反,综上所述,自然二进制数和格雷码各有优劣之处,需要根据具体应用场景选择合适的编码方式。简单来说,在计数器和编码器中,倾向于使用格雷码;而在进行加减运算时,则倾向于使用自然二进制数。

Loudrs的博客 7494

【PA2012】Tax (最短路)

因为图G的权值在点上,如果想用常规的最短路算法解决本题,可以构建一张新图G’,使G’中的点对应G中 的边,边对应G中的点。 由于一个点的权值取决于入边和出边的最大值,对于G中每个入边e以及出边e’,在G’中向与其对应p和p’连一条边,费用为两者的最大值。 这样新图中的总边数为m2,不能通过所有数据点。 结合点的权值取决于入边和出边的最大值的性质,可以利用差分思想降低总边数: 1.将原图中的一点的入边和出边按照

RabbitHole 681

vue3+SuperMap iClient3D for Cesium实现可视域分析功能

基于Vue3框架及SuperMap iClient3D for Cesium提供的ViewShed3D类实现场景动态可视域分析

qq_43334519的博客 2248

系统回溯信息:遇到严重错误。已将回溯写入...PTC... raceback.log请将其发送给|技术支持|。

一、问题分析 这种问题一旦遇上了,如果忘了保存,直接心态爆炸。 该问题一般是显卡驱动的问题。ProE/Creo对显卡的基本要求是:支持Open_GL的3D显卡,分辨率为1024×768像素以上,推荐使用64位独立显卡,显存512MB以上。如若显卡性能太低,打开软件后易自动退出。 二、解决方法 <1>有一个非常简单的方法是:在config.pro文件中,改变图形配置graphics为” win32_gdi”而不是默认的“...

幕光倾城的博客 2万+

BZOJ4289:[PA2012]Tax(Dijkstra)

传送门 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价。起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权。(n≤100000,m≤200000)(n\le 100000,m \le 200000) 题解:Dijkstra首先暴力就是把每个点的状态加上是从哪一条边进入的,即是把每条边看做一个点,这样虽然点数是O(n)

DZYO的博客 632

在昇腾910B上,用kubeadm快速拉起一个双节点K8s集群(保姆级避坑指南)

本文详细介绍了在昇腾910B服务器上使用kubeadm快速搭建双节点Kubernetes集群的完整流程,包括环境准备、容器运行时配置、kubeadm初始化、节点加入与网络插件部署等关键步骤,特别针对ARM架构和昇腾芯片提供了优化配置和避坑指南。

weixin_29204749的博客 246

【现代控制理论基础】四、控制系统的稳定性

稳定性是系统定性分析中的一个重要的内容,实际工程中,可以应用的系统必须是稳定的。

AXYZdong的博客 2379

ultralytics.data.utils——utils.py子模块代码详读

ultralytics.data.utils——utils.py子模块代码详读

Together_CZ的博客 1721

Mybatis面试题(基础篇)

(1)mybatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。(2)mybatis避免了几乎所有的JDBC代码(说明了mybatis底层用的就是JDBC,只不过是封装了)和手动设置参数以及获取结果集。(3)mybatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的pojo映射成数据库中的记录。

qq_38196449的博客 1687

bzoj 4289 PA2012 Tax——构图

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4289 可以把一个点上的边按权值排序,然后边权小的向第一个比它大的连差值的边,边权大的向第一个比它小的连0边;这样能体现出“边权较大的边的边权”。 别忘了每条边还要自己跟自己连自己权值的边,表示不是差值的初始值。 #include<iostream> #include&...

weixin_34088583的博客 108

有限元分析-静力学分析-与分析解对比-——以阶梯轴的静力分析为例——静态结构分析

150mm,a=300mm{a=300mm}a=300mm,b=200mm{b=200mm}b=200mm,L=1000mm{L=1000mm}L=1000mm,F=300kN{F=300kN}F=300kN,材料为45,弹性模量E=2.1e11Pa{E=2.1e11Pa}E=2.1e11Pa,泊松比v=0.28{v=0.28}v=0.28,屈服应力δs=355MPa{δ_s=355MPa}δ。使用line body生成的模型,可以选择自动划分网格的,WB会将以梁单元将其划分完成,例如图2所示。

qq_15963745的博客 66

bzoj 4289: PA2012 Tax 最短路

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

lych的博客 1566

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

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

Android66666的博客 207

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

BZOJ4289 PA2012Tax(最短路)

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

weixin_30911451的博客 139

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

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

HbFS- 687

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

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

weixin_30609331的博客 62

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

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

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

CE玩家 692

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

bzoj 4289: PA2012 Tax(最短路+建图)

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

clover_hxy的博客 822

【BZOJ4289】【PA2012】Tax(最短路)

Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价。起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权 Solution 直接在中转站枚举下一条边是O(n2)O(n2)O(n^2)的,我们对于每一个中转站,将边从小到大排序,将排名相邻的边一个向另一个连上它们的差,另一个向一个连0即可。...

დ♂Hany01's Blog Space♂ღ 225

[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

BZOJ 4289: PA2012 Tax 差分建图 最短路

https://www.lydsy.com/JudgeOnline/problem.php?id=4289 https://www.cnblogs.com/clrs97/p/5046933.html claris的题解很清晰 如果单纯把无向边拆成有向边然后变成点再连有向边需要建m^2条边。 那么这里可以差分建图压缩新图边的数量,把原图每个点的出边和入边排序,权值相同的出边到入边(开始...

weixin_30622181的博客 135
上一篇: [BZOJ2281][Sdoi2011]黑白棋(博弈+组合数学)
下一篇: [BZOJ4184]shallot(线段树+线性基)
FromATP
博客等级 码龄10年 75粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值