首页 > 其他分享 >【题解】[2023 合肥蜀山初中] 旅行(travel)

【题解】[2023 合肥蜀山初中] 旅行(travel)

时间:2024-10-16 18:35:22浏览次数:8  
标签:pq int 题解 travel 公共交通 push 2023 pair dis

题目传送门

题目大意

有一个 \(n\) 个点 \(m\) 条边的有向图组成的城市,每条边可以是骑行边或公共交通边,公共交通边只能走一条,边是从 \(u_i\) 到 \(v_i\) 的有向边,需要花费 \(time_i\) 的时间,求 \(1\) 到其他点的最短路径。

思路分析

有一个很巧妙的思路叫分层图,它的思路是因为只能经过至多 \(1\) 条公共交通边,所以可以只连骑行边,把图复制一遍,得到两层图。公共交通边作为两层图的连接的边,第一层图的 \(u\) 连接第二层的 \(v\),连一张单向边。这样做保证了只经过一条公共交通边,因为在第一层跑最短路,经过一条公共交通边后,会在第二层图跑最短路,到第二层图后就永远不会到第一层,也就不会经过多次公共交通边了。

考虑如何实现,我们认为第一张图是 \(1\)$i$\(n\),第二张图是 \(n+1\)$n+i$\(n+n\),建骑行边就是 \(u\to v\) 和 \(u+n\to v+n\),在两张图上建,公共交通边就是 \(u\to v+n\),第一层图的 \(u\) 连接第二层的 \(v\),再在图上跑 dijkstra 就行,朴素和堆优化均可。

这里就写堆优化了,时间复杂度 \(\mathcal{O(m\log m)}\)。

\(\texttt{code}\)

/*Written by smx*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define QAQ cout<<"QAQ";
const int MAXN=4e5+5,inf=1e18,mod=1e9+7;
vector<pair<int,int> > g[MAXN];
int n,m;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > pq;
int dis[MAXN],vis[MAXN];
void dijkstra(int s){
	memset(dis,0x3f,sizeof(dis));
	dis[s]=0;
	pq.push(make_pair(0,s));
	while(!pq.empty()){
		pair<int,int> k=pq.top();
		pq.pop();
		if(vis[k.second]) continue;
		vis[k.second]=1;
		for(int i=0;i<g[k.second].size();i++){
			int to=g[k.second][i].first;
			int w=g[k.second][i].second;
			if(dis[to]>k.first+w){
				dis[to]=k.first+w;
				pq.push(make_pair(dis[to],to));
			}
		}
	}
	for(int i=1;i<=n;i++){
		dis[i]=min(dis[i],dis[i+n]);
	}
}
signed main(){
	freopen("travel.in","r",stdin);
	freopen("travel.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v,op,t;
		cin>>u>>v>>op>>t;
		if(op==1){
			g[u].push_back(make_pair(v,t));
			g[u+n].push_back(make_pair(v+n,t));
		}else{
			g[u].push_back(make_pair(v+n,t));
		}
	}
	dijkstra(1);
	for(int i=2;i<=n;i++){
		if(dis[i]==0x3f3f3f3f3f3f3f3f){
			cout<<"-1 ";
		}else{
			cout<<dis[i]<<" ";
		}
	}
	return 0;
}

标签:pq,int,题解,travel,公共交通,push,2023,pair,dis
From: https://www.cnblogs.com/shimingxin1007/p/18470512

相关文章

  • Excel DLL丢失?Excel DLL文件下载指南及常见问题解决方案
    当您在使用MicrosoftExcel时遇到提示DLL文件丢失或损坏的情况,这可能会影响软件的正常运行。为了帮助您解决这一问题,本文提供了ExcelDLL文件的下载指南,并针对常见问题给出了解决方案。一、ExcelDLL文件下载指南确定缺失的DLL文件:首先,您需要确定是哪个DLL文件丢失或损坏......
  • 数据结构1系列题解前瞻
    A.线段树分裂算法:线段树、(平衡树?)板子题,不多做评价。但是开发空间很大,我的写法在洛谷题解上没找到,导致当时想贺题解没贺成。B.三元上升子序列算法:线段树、树状数组、分块、(CDQ分治?)二维偏序板子,开发空间极大,想怎么写就怎么写。C.STEP算法:线段树、分块线段树维护子区间信......
  • P1941 NOIP2014 提高组 飞扬的小鸟 题解
    P1941NOIP2014提高组飞扬的小鸟分析背包经典演变问题玩得挺花。设\(f[i][j]\)表示到达\((i,j)\)的时候的最小点击次数。题目中对于每一个\(i\)有两种处理:点击与不点击(重点:点击可以叠加)。所以,对于点击,我们可以像完全背包一样转移,而不点击就按照01背包转移。对于管......
  • [NOI2020] 美食家 题解
    属于是将矩阵快速幂的绝大部分技巧用到了极致的一道题。暴力部分首先我们先考虑一个普通DP。定义\(dp_{t,i}\)表示在时间为\(t\)时到达点\(i\)可以得到的愉悦值之和的最大值。显然有\((i,j)\inE\todp_{t+w,j}=\max(dp_{t,i}+c_j)\)。特判一下当前节点有美食节的情......
  • 洛谷 P5175 数列 题解
    纯纯数学题。看到\(n\le10^{18}\)不难想到矩乘,但是\(\log_210^{18}\approx60\),再加上\(T=30000\)的多测,运算量已经来到了\(1.8\times10^6\),所以我们最多有一个\(\sqrt[3]{\frac{1.5\times10^8}{6\times10^6}}\approx4\)的矩阵。\[\becausea_i=xa_{i-1}+ya_{......
  • 读书笔记《稀缺-我们是如何陷入贫穷与忙碌的》2023-6-21
    读书笔记《稀缺-我们是如何陷入贫穷与忙碌的》2023-6-21基本信息书名:《稀缺-我们是如何陷入贫穷与忙碌的》作者:[美]塞德希尔·穆来纳森(SendhilMullainathan)[美]埃尔德·莎菲尔(EldarShafir)​​​​译者:魏薇龙志勇出版社:浙江教育出版社.湛庐出版时间:2022年10月......
  • 会声会影2023永久激活旗舰版免费下载v26.2.0.311免费中文版(附Crack补丁)
    软件介绍会声会影2023永久激活版是一款刚刚最新推出的多功能视频剪辑软件,这款软件不仅完美继承了之前多个版本当中的强大功能。而且我们还可以通过会声会影2023永久激活版来体验到标题动态选项、标题特效等多个全新的功能,让你可以更加快速地进行视频编辑。会声会影2023永久激......
  • YOLOv11改进策略【卷积层】| ICCV-2023 SAFM 空间自适应特征调制模块 对C3k2进行二次
    一、本文介绍本文记录的是利用空间自适应特征调制模块SAFM优化YOLOv11的目标检测方法研究。SAFM通过更好地利用特征信息来实现模型性能和效率的平衡。本文通过二次创新C3k2,能够动态选择代表性特征,并结合局部上下文信息,提升模型的检测精度。专栏目录:YOLOv11改进目录一览......
  • Project Euler 588 题解
    这玩意好像甚至有递推式……不太懂(为什么是图片?cnblogs第一个公式没渲染成功)时间复杂度是\(O(4^{\degF}\logK)\)的。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintmaxn=100;intf[17][maxn],cur[10],al[4];intcalc(intK){ //cer......
  • 题解:[SNCPC2019] Pick Up
    ProblemLink[SNCPC2019]PickUp题意给出甲的坐标和速度,乙的坐标和速度,商场的坐标,可以让乙去接甲,求甲前往商场的最短用时。Solution分类讨论。思考乙是否要去接甲。这个很简单,令\(ans1\)为甲自己出发耗时,\(ans2\)为乙接甲耗时,两者取最小值即可。\(ans1\)很好算,那么\(......