首页 > 其他分享 >「POI 2003」 Smugglers

「POI 2003」 Smugglers

时间:2024-03-22 15:33:54浏览次数:12  
标签:ll pos Smugglers 金属 2003 while 过境 POI

题意

给定 \(n\) 种金属的价格,带任意一种金属过境都要交其价格 \(50\%\) 的税。

有 \(m\) 种关系,每种可以把第 \(a_i\) 种金属单向转换成第 \(b_i\) 种金属,花费 \(c_i\) 的代价。你可以在过境前后进行任意次转换。

最开始你有第 \(1\) 种金属,并需要带第 \(1\) 种金属过境,求最小代价。

分析

比较明显的最短路。

设 \(i\) 为第 \(i\) 种金属过境前的编号;\(i+n\) 为第 \(i\) 种金属过境后的编号。

把 \(i\) 向 \(i+n\) 连边,边权为金属价格的一半。

把 \(a\) 向 \(b\),\(a+n\) 向 \(b+n\) 连边,边权为 \(c\)。

从 1 跑最短路,答案为 \(dis_{n+1}\)。

用 Dijkstra,时间复杂度为 \(O((n+m)\log (n+m))\)。

Code

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline ll read(){ll x=0,f=1;char c=getchar();while(c<48||c>57){if(c==45)f=0;c=getchar();}while(c>47&&c<58)x=(x<<3)+(x<<1)+(c^48),c=getchar();return f?x:-x;}
const ll maxn=5005;
ll n,m,head[maxn<<1],tot,dis[maxn<<1];
bool vis[maxn<<1];
struct edge{ll to,nxt,val;}e[300005];
struct node{
    ll dis,pos;
    inline bool operator<(const node& b)const{
        return b.dis<dis;
    }
};
inline void add(ll u,ll v,ll w){
    e[++tot]=(edge){v,head[u],w};
    head[u]=tot;
}
inline void dij(ll s){
    memset(dis,0x3f,sizeof(dis));
    dis[s]=0;
    priority_queue<node>q;
    q.push((node){0,s});
    while(!q.empty()){
        node u=q.top();q.pop();
        if(vis[u.pos])continue;
        vis[u.pos]=1;
        for(ll i=head[u.pos];i;i=e[i].nxt){
            ll v=e[i].to;
            if(dis[u.pos]+e[i].val<dis[v]){
                dis[v]=dis[u.pos]+e[i].val;
                if(!vis[v])q.push((node){dis[v],v});
            }
        }
    }
}
signed main(){
    n=read();
    for(ll i=1;i<=n;++i)add(i,i+n,read()/2);
    m=read();
    while(m--){
        ll u=read(),v=read(),w=read();
        add(u,v,w),add(u+n,v+n,w);
    }
    dij(1);
    printf("%lld",dis[n+1]);
    return 0;
}

标签:ll,pos,Smugglers,金属,2003,while,过境,POI
From: https://www.cnblogs.com/run-away/p/18089604

相关文章

  • QT 智能指针 QPointer QScopedPointer QSharedPointer QWeakPointer QSharedDataPoint
    QPointerQPointer是一种受保护的指针,当其引用的对象被销毁时,它会被自动清除(但是,销毁引用对象还是必须手动delete)。QPointer所指向的对象必须是QObject或其派生类对象。当多个指针指向同一个Object对象时,引用的对象可能被释放掉,这时使用QPointer就可以安全的测试引用对象是......
  • fastendpoint+maomi的一种实现原理
    1整个框架就是fastendpoint(api处理,鉴权授权,参数校验,对象映射等基础功能集成),maoni(Service注入,依赖关系处理,参考的是abp,比较轻量级,源码我放在附件里了,实现模块化注入)fastendpoint:https://fast-endpoints.com/maomi: https://maomi.whuanle.cn/1.module.html2项目截图:......
  • 论文精读系列文章——Point-LIO: Robust High-Bandwidth Light Detection and Ranging
    论文精读系列文章下面是SLAM算法与工程实践系列文章的总链接,本人发表这个系列的文章链接均收录于此论文精读系列文章链接下面是专栏地址:论文精读系列文章专栏文章目录论文精读系列文章论文精读系列文章链接论文精读系列文章专栏前言论文精读系列文章——......
  • 利用EasyPoi 实现 传入List数据,输出excel文件
    基本描述场景用户传入List数据,要求生成Excel文件(糟糕的需求是真糟糕!!!)本次算是未完成版[应付需求还是可以的](需要硬代码去编写模板,各位宝子们先将就下,后续会跟新传参版)特别提醒时间字段我们当做字符处理的写模板的时候不要用format属性(暂无特别好的解决方案,有大神可以以指......
  • P3478 [POI2008] STA-Station
    原题链接WARNING!!!使用map代替数组不再可靠,因为map的插入查找修改复杂度均为\(O(logn)\),即使unorder_map也不行!!!题解我们发现,当一个节点的深度之和已知时(这里认为是根节点),其相邻节点的深度之和也可通过某种方程转移而得,有人称这种方法为换根DP具体的,将树拆开成图(求深度之和......
  • AOSP平台编写Android-ebpf程序(tracepoint)的一些map定义和使用问题,导致map和prog无法
     前言本片文章并不主要讲解在AOSP平台ebpf程序的整个编写流程,只是一些的map的定义使用问题,如有需要可查看,aosp平台的整个下载流程,以及简单的程序的编译和如何push到手机运行,这位up是我在ebpf领域探索的领路人,本站ID:LiujiaHuan13,如果有需要up本人后面会考虑写一篇aosp程序书写......
  • powerpoint: 渐隐的直线
    一,添加直线:工具栏上标签:插入->形状->线条:说明:刘宏缔的架构森林—专注it技术的博客,网址:https://imgtouch.com本文: https://blog.imgtouch.com/index.php/2024/03/03/powerpoint-jian-yin-de-zhi-xian/代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuh......
  • powerpoint:添加动态的水印
    一,添加水印视图->幻灯片母版:选中第一个母版->插入->图片从菜单选择来自文件的图片:选中插入做为水印的图片->图片格式标签下->选择透明度->选择合适的一个:二,设置动画:调整动画路径的形状:选中动画后,设置动画的属性:开始:与上一动画同时持续时间:指定为动画的时间......
  • powerpoint:镂空文字
    一,创建矩形和文本框在图片上添加一个矩形,在矩形上添加一个文本框:说明:刘宏缔的架构森林—专注it技术的博客,网址:https://imgtouch.com本文: https://blog.imgtouch.com/index.php/2024/03/02/powerpoint-lyu-kong-wen-zi/代码: https://github.com/liuhongdi/ 或 https:......
  • C++看程序写结果:调用一次Line类构造函数,执行几次Point类复制构造函数?
    C++看程序写结果:调用一次Line类构造函数,执行几次Point类复制构造函数?#include<iostream>#include<cmath>usingnamespacestd;classPoint{//Point类定义public:Point(intxx=0,intyy=0){x=xx;y=yy;}Point(Point&p);......