首页 > 其他分享 >L2-001 紧急救援

L2-001 紧急救援

时间:2024-03-14 10:22:40浏览次数:25  
标签:pre dist 救援 int 001 edges L2 vec 510

这道题就是在dijkstra的基础上增加了一些东西。
代码有参考别人,最后一步的处理很好。

#include <bits/stdc++.h>
using namespace std;
const int maxv = 0x7fffffff;
int edges[510][510];//从i到j的长度
int dist[510];//最短路径
bool check[510];//是否在集合之中
int num[510];//每个地点救援队的数量
int values[510];//到每个点救援队伍的数量
int cnt[510];//到每个点最短路的数量
int pre[510];//从哪里来的
int main() {
	int n,m,s,d;
	cin >> n>>m>>s>>d;
	for(int i=0; i<n; i++) cin>>num[i];
	for(int i=0; i<m; i++) {
		int a,b,c;
		cin>>a>>b>>c;
		edges[a][b]=c;
		edges[b][a]=c;
	}
	memset(dist,0x3f,sizeof(dist));
	memset(pre,-1,sizeof(pre));
	//起始点初始化
	dist[s]=0;
	values[s]=num[s];
	cnt[s]=1;
	for(int i=0; i<n; i++) {
		int minv=maxv,minx;
		for(int j=0; j<n; j++) { //找到最小的加入到集合中
			if(dist[j]<minv&&!check[j]) {
				minv=dist[j];
				minx=j;
			}
		}
		check[minx]=true;
		//更新dist和values和pre cnt
		for(int j=0; j<n; j++) {
			if(edges[minx][j]>0) {//如果可达
				if(minv+edges[minx][j]<dist[j]) {
					dist[j]=minv+edges[minx][j];
					pre[j]=minx;
					values[j]=values[minx]+num[j];
					cnt[j]=cnt[minx];//最短路数量
				} else if(minv+edges[minx][j]==dist[j]) {
					cnt[j]+=cnt[minx];
					//如果救援队的数量更大
					if(values[j]<values[minx]+num[j]) {
						values[j]=values[minx]+num[j];
						pre[j]=minx;
					}
				}
			}
		}
	}
	cout<<cnt[d]<<" " <<values[d]<<endl;
	vector<int> vec;
	int x = d;
	vec.push_back(x);
	while(pre[x]!=-1){
		vec.push_back(pre[x]);
		x=pre[x];
	}
	reverse(vec.begin(),vec.end());
    for(int i=0;i<vec.size();i++){
    	cout<<vec[i];
    	if(i<vec.size()-1) cout<<" ";
	}
	return 0;
}

标签:pre,dist,救援,int,001,edges,L2,vec,510
From: https://www.cnblogs.com/chengyiyuki/p/18072265

相关文章

  • L2-033 简单计算器(Python)
    作者 陈越单位 浙江大学本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 S1​ 存放数字,另一个堆栈 S2​ 存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:从 S1​ 中弹......
  • win11安装wsl2没有网络解决方法
    1、启用hyper-v2、打开hyper-v管理器-点击虚拟交换机管理器-先看下有无一个名为WSL(这个名字可以被修改,和下面对应就行)的虚拟交换机,有的话先设置为外部网络3、编辑%USERPROFILE%.wslconfig添加如下内容[wsl2]networkingMode=bridgedvmSwitch=WSLipv6=true12344、执行wsl-......
  • 【Express】mysql2 操作 MySQL 数据库
    db.config.yamldb:user:rootpassword:'root'host:localhostport:3306database:my_db_01importexpressfrom"express";importfsfrom"fs";importmysql2from"mysql2/promise";importjsyamlfrom�......
  • 什么是R语言?什么是R包?-R语言001
    R语言是一种专为统计计算和图形而设计的编程语言和环境。它最初由罗斯·伊哈卡和罗伯特·亨特尔在1993年创建,灵感来源于S语言。R语言已经发展成为统计学、数据分析、科学研究以及许多其他领域中最受欢迎和广泛使用的工具之一。R语言的核心是一个开源的解释型语言,这意味着它允许......
  • [Blazor] 学习随笔——RZ10012警告的处理
    程序能运行,就是告诉你RZ10012,然后各种提示没有了。清理解决方案、电脑重启了都没有用,后来搜索到github,解决了,记一下:关闭vs删除文件夹.vs,bin,object打开vs,重新生成解决方案也是醉了。文字少的博文不允许投稿到该网站分类?知道什么叫短小精悍吗?知道什么叫短小精悍吗?知道什......
  • [oeasy]python0010_怎么用命令行保存文件
    编写py文件......
  • CCPC Final2023 游记
    Day2024-03-11因为担心机票在日程临近的时候会变贵,于是打算提前订酒店。成功订到了比赛场地旁边的酒店,看了携程上的样板图,实在是赢麻了。打算周五早点去周二回天津,之前有一个想法是直接一气在川渝过完清明。但是考虑到周二晚上有组会,周四晚上可能有小组会,而且上一个周四是高代......
  • 网络开发基础客户端001
    在unity中的代码   暂时看来就是 首先需要定义一个 Socket 来接收  然后我们 需要定义byte【】来接收数据 以及一个string显示  第一步就是连接  这是一个异步 如果不用异步就会有阻塞  所有在里面首先先定义我们的socket然后设置连接......
  • 网络开发基础服务端001
    再服务端上    同上一期 客户端一样 也是定义Socket 绑定端口ip 然后进行监听  启动服务器 首先异步接收客户端  Console.ReadLine();是为了保证程序不会结束再异步应答中 其实就是一开始 先连接 然后在应答回调里面 进行接收回调 然后......
  • 中考英语首字母快速突破001-2021上海崇明英语二模
    中考英语首字母快速突破001-2021上海崇明英语二模PDF格式公众号回复关键字:ZKSZM002原文​Whichismoreimportanttoourlives,theInternetorthewashingmachine?Manyofusmightanswer,"TheInternet!"TheInternethelpsusgatherinformation.It......