市の緊急時間[PTA]

市の緊急救助チームのヘッドとして、あなたは国の特別なマップを持っています。ロードマップに表示するには、都市と都市との接続のいくつかのより急速な分散を有します。そして、二つの都市の高速道路の長さを結ぶ各都市ごとに救助隊の数は、地図上にマークされています。他の都市はあなたに緊急電話を持っていますが、あなたの使命は、多くの救助隊として召集するための方法に沿って、同時に、できるだけ早く事件に駆けつけレスキューチームをリードすることです。

入力フォーマット:

最初の行の入力は、4つの正の整数N(2≤N≤500)は都市の数であるN、M、S、Dを与え、都市は方法を想定0〜(N-1)の番号、Mは高速でありますいくつかの道路; Sは、番号出発都市のポイントであり、Dは、都市の宛先の数です。

2行目は、数字間のスペースで区切られた都市のi番目のI救助チームの数であるN、整数陽性を与えます。その後のM行の各行は、すなわち、情報の高速な方法を提供し、中間スペースで区切られた2、高速道路の1都市、都市の長さを、数値は500以下の整数です。実行可能な最適解ユニークな救助を確保するために入力。

出力フォーマット:

出力の最短パス最初の行及び招集できる救助隊の最大数の数。2行目は、市内番号を介してDからSパスに出力されます。スペースで区切られた数字の間には、出力の最後には、余分なスペースを持つことができません。

サンプル入力:

4 5 0 3
20 30 40 10
0 1 1
1 3 2
0 3 3
0 2 2
2 3 2

出力例:

2 60
0 1 3

100 ++と

#include<iostream>
#include <bits/stdc++.h>
#define Inf 0x3f3f3f3f
using namespace std;
int n,m,s,d;
int mp[505][505];//存放路径
int pace[505];//最短路径条数
int vis[505];//标记是否访问过
int num[505];
int sum[1001];//
int pre[1001];//前驱路径

void Dijkstra(){
	pace[s]=vis[s]=1;

	for(int i=0;i<n-1;i++){
		int MIN=Inf,f=-1;
		/***找距离源点最近的,且未被访问**/
		for(int j=0;j<n;j++){
			if(!vis[j]&&mp[s][j]<MIN){
				MIN=mp[s][j];
				f=j;
			}
		}
		if(f==-1) break;
		vis[f]=1;

		for(int j=0;j<n;j++){
			if(!vis[j]&&mp[s][j]>mp[s][f]+mp[f][j]){
				mp[s][j]=mp[s][f]+mp[f][j];
				pre[j]=f;
				pace[j]=pace[f];
				sum[j]=sum[f]+num[j];
			}
			else if(!vis[j]&&mp[s][j]==mp[s][f]+mp[f][j]){
				pace[j]+=pace[f];
				if(sum[j]<sum[f]+num[j]){
					pre[j]=f;
					sum[j]=sum[f]+num[j];
				}
			}
		}
	}
}
int main(){
	int city1,city2;
	cin>>n>>m>>s>>d;
	memset(vis,0,sizeof vis);
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			if(i!=j) mp[i][j]=mp[j][i]=Inf;
	for(int i=0;i<n;i++){
		cin>>num[i];
		sum[i]=num[i];
		pace[i]=1;
	}
	for(int i=0;i<m;i++){
		cin>>city1>>city2;
		cin>>mp[city1][city2];
		mp[city2][city1]=mp[city1][city2];
	}
	Dijkstra();
	cout<<pace[d]<<" "<<sum[d]+num[s]<<endl;


	int road[1001];
	int cur=d,cnt=0;
	while(pre[cur]!=0){
		road[cnt++]=pre[cur];
		cur=pre[cur];
	}
	//输出
	cout<<s;
	for(int i=cnt-1;i>=0;i--)
		cout<<" "<<road[i];
	cout<<" "<<d;
	return 0;
}

公開された200元の記事 ウォン称賛99 ビュー40000 +

おすすめ

転載: blog.csdn.net/weixin_43889841/article/details/104070822