首页 > 其他分享 >CF938D Buy a Ticket

CF938D Buy a Ticket

时间:2024-05-14 09:01:25浏览次数:21  
标签:Buy int 源点 que vec push Ticket CF938D dis

题目链接:https://www.luogu.com.cn/problem/CF938D

虚拟源点+最短路
首先因为所要求的权值由往返的路费和目的地需要的票价两部分构成,所以我们先对每座城市之间的道路建边,边权直接设为输入的两倍。之后我们建立一个虚拟源点,对所有城市链接一条单向边,边权就是城市的票价,即把点权转换为边权,然后再跑一遍最短路,最后输出这个虚拟源点到达当前遍历的城市的最短路。

因为从虚拟源点到目的地城市一定存在唯一的一条最短路,然而用虚拟源点等效建了一张图之后所有的信息都已经维护在最短路上了。


#define maxn 600010
int a[maxn];
vector<pr> vec[maxn];
int dis[maxn];
int n,m;
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int u,v,w;
        cin>>u>>v>>w;
        vec[u].push_back({v,2*w});
        vec[v].push_back({u,2*w});
    }
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        vec[0].push_back({i,a[i]});
    }
    memset(dis,0x3f,sizeof(dis));
    priority_queue<PII,vector<PII>,greater<PII> > que;
    vector<int> vis(n+1,0);
    dis[0]=0;
    que.push({dis[0],0});
    while(!que.empty())
    {
        auto x=que.top().second;
        que.pop();
        if(vis[x]) continue;
        vis[x]=1;
        for(auto v:vec[x])
        {
            int to=v[0];
            int w=v[1];
            if(dis[to]>dis[x]+w)
            {
                dis[to]=dis[x]+w;
                que.push({dis[to],to});
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        cout<<dis[i]<<" ";
    }
}

标签:Buy,int,源点,que,vec,push,Ticket,CF938D,dis
From: https://www.cnblogs.com/captainfly/p/18190485

相关文章

  • C. Torn Lucky Ticket
    原题链接题解1.题目对\(i,j\)没有限制,也就是说,i可以大于j,可以小于j,也可以等于j2.找普适规律。不管谁和谁成功配对,要么两个数长度相等;要么前面的数长度大于后面的数,于是前面的数分后半部分出来;要么后面的数大于前面的数,于是后面的数分前半部分出来;code#include<bits/stdc++.......
  • D. Buying Jewels
    D.BuyingJewelsAlicehas$n$coinsandwantstoshopatBob'sjewelrystore.Today,althoughBobhasnotsetupthestoreyet,BobwantstomakesureAlicewillbuyexactly$k$jewels.Tosetupthestore,Bobcanerectatmost$60$stalls(eachco......
  • C. Ticket Hoarding
    C.TicketHoardingAstheCEOofastartupcompany,youwanttorewardeachofyour$k$employeeswithatickettotheupcomingconcert.Theticketswillbeonsalefor$n$days,andbysometimetravelling,youhavepredictedthatthepriceperticketat......
  • 跨境独立站pandabuy cssbuy 跨境Micro微店商品详情
    跨境独立站运用微店详情API接口:实现高效运营与营销新突破在全球化日益加速的今天,跨境独立站成为越来越多商家拓展海外市场、提升品牌影响力的关键平台。为了更好地满足用户需求,提升用户体验,跨境独立站需要不断引入先进的技术手段,其中,微店详情API接口的应用,为商家带来了全新的运营......
  • CF865D Buy Low Sell High
    传送门题意:已知未来\(n\)天的股价\(c_i\),每天可以买入一支或者卖出一支,求\(n\)天后利润总额最大是多少。算法:模拟费用流。【费用流模型】把每一天抽象为一个结点:\(d_1\simd_n\)。\(S\rightarrowd_1\simd_n\),容量\(1\)费用\(-c_i\)。\(d_1\simd_n\rightarrowT......
  • 【前端素材】推荐优质电影票购票商城网站设计Ticket平台模板(附源码)
     一、需求分析1、功能分析在线电影票购票商城是指一个通过互联网提供电影票购买服务的平台。它通常包括以下功能:电影信息展示:商城会展示当前热映电影、即将上映电影和影片详情,包括电影名称、演员阵容、导演、剧情简介、上映时间等信息,帮助用户选择电影。影院选择和座位......
  • A. Rudolf and the Ticket
    题解简单的二分应用,对于每个bi我们只需找到最大的ci使得bi+ci<=target即可code #include<bits/stdc++.h>usingnamespacestd;inta[105],b[105];intmain(){//freopen("input.txt","r",stdin);intt;cin>>t;while(t--){int......
  • [极客大挑战 2019]BuyFlag1
    [极客大挑战2019]BuyFlag1审题菜单有一个home,一个payflag查看payflag中的要求具体有三个要求要有100000000块钱要是CUIT的学生回答正确的密码知识点http消息头的伪造解题抓包查看信息看到user=0,猜测这应该是CUIT的学生的判断条件更改为1。再次查看抓......
  • Buy Tickets
    BuyTicketsRailwayticketsweredifficulttobuyaroundtheLunarNewYearinChina,sowemustgetupearlyandjoinalongqueue…TheLunarNewYearwasapproaching,butunluckilytheLittleCatstillhadschedulesgoinghereandthere.Now,hehadt......
  • CF103E Buying Sets(最大权闭合子图模型)
    题意简述有\(n\)个元素和\(n\)个集合,保证任意\(k\)个集合的并\(\gek\)。每个集合有权值\(a_i\),你需要选出一些集合使得集合数等于集合并大小,并在此基础上最小化选出的集合权值和。\(n\le300,|a_i|\le10^6\)。分析将集合和元素看成物品,我们发现,若选择了一个集合,则......