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

SAP Script表单开发中ABAP preform方法的实战应用与调试技巧 本文深入探讨了在SAP Script表单开发中调用ABAP程序(preform方法)的实战应用与调试技巧。通过一个获取供应商版本名称的实例,详细讲解了如何在SE71中嵌入PERFORM指令、编写ABAP子程序进行数据查询与处理,并重点介绍了使用SAP Script Debugger进行高效调试的方法,帮助开发者灵活扩展表单功能,实现复杂业务逻辑。 阅读详情

=== ===

这里放传送门

=== ===

题解

很容易想到化边为点然后如果两条边有公共点就连边,但是这样的话边数在极限情况下是 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;
}
openwrt编译及第一个安装包教程 Date: 2017.03.14 Made:SuperDeverloper Email: na1206@live.com Target: For mt7688 based board说明:本人在学习过程中走了不少弯路,希望本文档能为后来者提供便利。欢迎复制和使用本文档。本文档记录了搭建openwrt编译环境以及快速创建ipk包(openwrt上的安装程序)。本文档在实际应用中做过几次修改,以帮 阅读详情

相关推荐

从零构建DDS信号发生器:STM32 DAC与DMA的完美交响

本文详细介绍了如何利用STM32的DAC模块和DMA控制器从零构建高性能DDS信号发生器。通过深入解析DDS技术原理、STM32 DAC特性及DMA高效数据传输,提供了完整的波形生成算法、硬件电路设计和软件实现方案,帮助开发者掌握数字信号合成的核心技术。

tree8的博客 705

bzoj4289(神建图+最短路)

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

qkoqhh 631

uniapp 基于单选框多选框实现上拉触底多选/单选、回显

showPickerCheckbox弹层显示 label和value 类似下拉框的label和value一个意思 键和值。结果:可以传接口(接口只能post请求) 可以搜索 下面是结果图片展示 单选多选都可以。fieldValue回显传的值 传的是字符串 数组的话[1,2]转为1,2格式传入。mode是控制的单选还是多选 true为多选默认值 其余参数 单选多选一样。fieldName字段名 确定后会返回该字段名 根据字段名找对应的传入值。问题:在uniapp上 实现分页多选的操作。下面是组件的完整代码。

2301_76607997的博客 2936

【PA2012】Tax (最短路)

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

RabbitHole 681

高云FPGA开发实战:手把手教你用ModelSim做功能仿真与时序分析(附Testbench写法)

本文详细介绍了高云FPGA开发中如何使用ModelSim进行功能仿真与时序分析,包括环境搭建、Testbench编写、波形调试和时序优化等实战技巧。通过具体案例和代码示例,帮助开发者掌握FPGA仿真验证的核心方法,提升设计可靠性。特别针对高云GW5A系列器件提供了专业的仿真库配置指南和时序分析策略。

weixin_30412167的博客 467

基于STM32F103C8T6单片机设计CAN接口8路继电器控制板硬件(原理图+PCB)+软件源码

基于STM32F103C8T6单片机设计CAN接口8路继电器控制板硬件(原理图+PCB)+软件源码,仅供学习及设计参考。

GJZGRB的博客 1416

BZOJ4289:[PA2012]Tax(Dijkstra)

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

DZYO的博客 632

电源芯片MPQ3431A

MPQ3431A是一款具有宽输入范围的固定频率为450kHz的高度集成的升压转换器,其输入电压低至2.7V,采用恒定关断时间(COT)的控制拓扑,可提供快速的瞬态响应。芯片支持通过MODE管脚配置PSM(pulse-skip mode)、FCCM(forced continuous conduction mode)和USM(ultrasonic mode);还支持通过电流限制配置来达到精确的过流保护;同时芯片欠压保护(UVLO)和过温保护(OTP)。MPQ3431A采用QFN-13(3mmx4mm)封装。保

qflook的博客 1560

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

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

AXYZdong的博客 2379

增距镜或中继镜选型

增距镜光路图

camerall 5247

【KingSCADA】如何创建新应用

KingSCADA3.8集成开发环境是基于工程的应用管理模式,实现了对多个应用的集中开发和管理的功能,一个工程可以同时管理多个应用,即在KingSCADA3.8工程设计器中可以同时对多个应用进行开发,应用之间可以实现相互复制、粘贴等功能,大大提高了开发效率。(此处感觉和VS类似)使用KingSCADA3.8开发的系统称为应用,一个完整的应用一般包含以下部分或全部内容:IO设备、IO采集点、图形界面、动画链接、趋势曲线、报警和事件、历史记录、数据库、Web Server等部分。

做有价值的事,积累有价值的笔记! 3108

bzoj 4289 PA2012 Tax——构图

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

weixin_34088583的博客 108

连接参数详解:Connection Interval, Slave Latency, Supervision Timeout 的协同与调优实战

在低功耗蓝牙(BLE)开发与调试中,Connection Interval(连接间隔)、Slave Latency(从机延迟) 和 Supervision Timeout(监督超时) 是三个核心参数。它们不仅直接影响设备的通信性能、功耗表现和连接稳定性,更是各类技术面试与认证考试的高频考点。本文将从基础概念出发,深入剖析三者的协同机制,结合历年真题解析考点与解题思路,并通过实战案例演示调优方法,快速掌握这一核心知识点。

byte轻骑兵的技术小窝 2761

bzoj 4289: PA2012 Tax 最短路

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

lych的博客 1566

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

Android66666的博客 207

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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、付费专栏及课程。

余额充值