P4568 [JLOI2011] 飞行路线

news/2024/7/15 19:48:53 标签: 图论

时间复杂度 O(k * (n + m))

注意存边的数组大小,除了 k * m个边外,还有上下层之间的边,数组再开大点就行。(不然会re tle

#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <set>
#include <map>
#include <queue>
#include <ctime>
#include <random>
#include <sstream>
#include <numeric>
#include <stdio.h>
#include <functional>
#include <bitset>
#include <algorithm>
using namespace std;

// #define Multiple_groups_of_examples
#define IOS std::cout.tie(0);std::cin.tie(0)->sync_with_stdio(false);
#define dbgnb(a) std::cout << #a << " = " << a << '\n';
#define dbgtt cout<<" !!!test!!! "<<endl;
#define rep(i,x,n) for(int i = x; i <= n; i++)

#define all(x) (x).begin(),(x).end()
#define pb push_back
#define vf first
#define vs second

typedef long long LL;
typedef pair<int,int> PII;

const int INF = 0x3f3f3f3f;
const int N = 3e6 + 21;
int e[N], ne[N], w[N], h[N], idx;
bool vis[N];
int dist[N];
void add(int u, int v, int a) {
	e[idx] = v, ne[idx] = h[u], w[idx] = a, h[u] = idx++;
}
void inpfile();
void solve() {
	int n,m,k; cin>>n>>m>>k;
	int st,ed; cin>>st>>ed;
	st++; ed++;
	memset(h, -1, sizeof(h));
	rep(i,1,m) {
		int u,v,a; cin>>u>>v>>a;
		u++; v++;
		add(u,v,a);
		add(v,u,a);
		rep(j,1,k) {
			// 每一层处理
			add(u + j * n, v + j * n, a);
			add(v + j * n, u + j * n, a);
			// 层与层
			add(u + (j-1) * n, v + j * n, 0);
			add(v + (j-1) * n, u + j * n, 0);
		}
	}
	priority_queue<PII> heap;
	heap.push({0,st});
	memset(dist, 0x3f, sizeof(dist));
	dist[st] = 0;
	// cout<<dist[st]<<endl;
	while(heap.size()) {
		auto tmp = heap.top(); heap.pop();
		int ver = tmp.vs, distance = -tmp.vf;
		if(vis[ver]) continue;
		vis[ver] = 1;
		for(int i = h[ver]; ~i; i = ne[i]) {
			int y = e[i];
			if(dist[y] > distance + w[i]) {
				dist[y] = distance + w[i];
				heap.push({-dist[y],y});
			}
		}
	}
	int mi = INF;
	// cout<<dist[st];
	// rep(i,1,n) cout<<dist[i]<<" ";
	rep(i,0,k) mi = min(mi, dist[ed + i * n]);
	cout<<mi;
}
int main()
{
	#ifdef Multiple_groups_of_examples
	int T; cin>>T;
	while(T--)
	#endif
	solve();
	return 0;
}
void inpfile() {
	#define mytest
	#ifdef mytest
	freopen("ANSWER.txt", "w",stdout);
	#endif
}

分层图_语法糖likedy的博客-CSDN博客

图论学习:分层图_ACMer_lld的博客-CSDN博客

分层图总结_best_brain的博客-CSDN博客

[P4568 JLOI2011] 飞行路线 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)


http://www.niftyadmin.cn/n/4939704.html

相关文章

Element Plus报错:ResizeObserver loop completed with undelivered notifications.

el-selected踩坑&#xff1a;el-selected 显示下拉框 mouseover 时报错&#xff01;&#xff01;&#xff01; 原来是属性 popper-append-to-body 被废除&#xff0c;改为 teleported。 element ui <el-select:popper-append-to-body"false"value-key"id&q…

【js】根据给定的数组和属性从源数组中获取数据

想从一个数组中&#xff0c;根据该数组的某个属性值&#xff0c;例如id&#xff0c;取出相对应的数据&#xff0c;可以参考下面的方法 getDataByGivenArray: function(sourceArray, indexArray , indexKey) {var array [];for (var i 0; i < sourceArray.length; i) {if (…

HCIP的MPLS实验

题目 拓扑图 IP地址及环回配置 注&#xff1a;R2的g0/0/1口和g0/0/2口还有R4的g0/0/0口和g0/0/2口都先不配置IP&#xff0c;因为后面这些接口的IP需要放入vpn空间中 R1 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysname r1 [r1]int l0 […

分布式系统监控zabbix安装部署以及使用

文章目录 分布式系统监控zabbix安装部署及使用一.zabbix监控1.什么是zabbix2.zabbix功能3.zabbix的构成4.zabbix的3种架构4.1 C/S架构4.2 分布式架构&#xff1a;zabbix-proxy-client架构4.3 master-node-client架构 5.zabbix工作原理及数据流向6.zabbix监控模式 二.zabbix部署…

Spring对象装配

在spring中&#xff0c;Bean的执行流程为启动spring容器&#xff0c;实例化bean&#xff0c;将bean注册到spring容器中&#xff0c;将bean装配到需要的类中。 既然我们需要将bea装配到需要的类中&#xff0c;那么如何实现呢&#xff1f;这篇文章&#xff0c;将来阐述一下如何实…

项目管理工具探析:详细介绍四种常用选择

市场上的项目管理工具&#xff0c;主要是解决项目计划制定、任务协作、文档协作这几方面的问题&#xff0c; 下面简单聊聊一些自己用过的工具&#xff1a; 1、Excel/在线协作表格 如果项目简单&#xff0c;任务数少&#xff0c;没什么依赖&#xff0c;那么就可以用Excel来做项目…

C++ 动态规划经典案例解析之最长公共子序列(LCS)_窥探递归和动态规划的一致性

1. 前言 动态规划处理字符相关案例中&#xff0c;求最长公共子序列以及求最短编辑距离&#xff0c;算是经典中的经典案例。 讲解此类问题的算法在网上一抓应用一大把&#xff0c;即便如此&#xff0c;还是忍不住有写此文的想法。毕竟理解、看懂都不算是真正掌握&#xff0c;唯…

lodash常用方法笔记

_.fromPairs(pairs) 与_.toPairs正好相反&#xff1b;这个方法返回一个由键值对pairs构成的对象。 _.fromPairs([[fred, 30], [barney, 40]]); // > { fred: 30, barney: 40 }Object.fromEntries()有同样的功能&#xff0c;只是在高版本浏览器才支持&#xff1a; _toPai…