重要人物(最短路)

2021-10-02 14:46:21 字數 2756 閱讀 7461

題目描述

某重要人物p要尋訪城市c的g個地方,由於該人物非常重要,交警打算對人物p行走的街道進行臨時封道(不准普通市民進入,但如果在封道前進入的可以繼續行走,也可以正常出去)。當人物p進入這條街道之前和p走出這條街道之後,普通市民都可以正常進入該街道。

比如,p在第10分鐘期間進入街道x,並要x街道上行走5分鐘,則在第10、11、12、13、14分鐘期間,普通市民不可以進入x街道,市民可以在第9分鐘之前(含第9分鐘)進入,也可以在第15分鐘之後(含第15分鐘)進入。

人物p尋訪k分鐘後,有一市民s打算從城市的a處到達b處,請程式設計計算p從a到b的最少用時。注意:市民s在行走的過程中某條街道可以走,但為了用更短的時間,可以選擇等待!

輸入

共m+3行。

第1行2個整數n 和 m (2 ≤ n ≤ 1000, 2 ≤ m ≤ 10 000),分別表示城市中的結點(即某個地方,從1到n編號)的數量以及街道的數目。

第2行包含4個整數a, b, k 和 g (1≤a,b≤n, 0≤k≤1000, 0≤g≤1000),分別表示:

市民s的出發地

市民s的目的地

市民s是在人物p尋訪k分鐘後開始出發

人物p尋訪的結點(地方)數量

第3行g個整數,表示人物p將要尋訪的g處地方的編號,每一對結點代表了人物p尋訪要經過的街道,每條街道僅走一次。

接下來m行,每行3個整數a, b 和 l(1 ≤ a, b ≤ n, 0 ≤ l ≤ 1000),表示a和b之間有一條需要走l分鐘的街道(假定人物p和市民s行走速度相同)。

輸出

包含1行,表示市民s從a處到達b處的最少用時(單位分鐘)。

樣例輸入

【樣例1】

6 51 6 20 4

5 3 2 4

1 2 2

2 3 8

2 4 3

3 6 10

3 5 15

【樣例2】

8 91 5 5 5

1 2 3 4 5

1 2 8

2 7 4

2 3 10

6 7 40

3 6 5

6 8 3

4 8 4

4 5 5

3 4 23

樣例輸出

【樣例1】

21【樣例2】

40提示

40%的資料保證2 ≤ n ≤ 550且2 ≤ m ≤ 4000

100%的資料保證2 ≤ n ≤ 1000且2 ≤ m ≤ 10000

思路

根據題意,找封閉路段的每乙個時間間隔,在考慮時間間隔的基礎上跑最短路即可,注意雙向邊同時建立時間間隔

**實現

#pragma gcc optimize(3,"ofast","inline")

#include

using

namespace std;

typedef

long

long ll;

typedef

unsigned

long

long ull;

const

int n=

1005

;const

int m=

10005

;const

int inf=

0x3f3f3f

;const ull sed=31;

const ll mod=

1e9+7;

const

double eps=

1e-9

;typedef pair<

int,

int>p;

typedef pair<

double

,double

>pd;

struct qnode

bool

operator

<

(const qnode &r)

const};

struct node

e[m<<1]

;int head[n]

,cnt,n,m;

int a,b,k,g;

int w[n]

;int dis[n]

;p vst[m<<1]

;bool vis[n]

;void

add(

int u,

int v,

int w)

void

dji(

int s)

priority_queueque;

que.

push

(qnode

(s,k));

dis[s]

=k;while

(!que.

empty()

)}else}}

}}void

dfs(

int x,

int tot,

int t)}}

intmain()

dfs(w[0]

,0,0

);dji(a)

;printf

("%d\n"

,dis[b]

-dis[a]);

return0;

}

前幾年系列2 評主要人物

渣渣小評2 評 天地英雄 主要人物 看電影 褒揚的心態 好電影 好心情 天地英雄 2003 10 9 沙漠,海子,峽谷,還有那座孤城。長弓,冷箭,彎刀,還有那把胡琴。刀手,駱駝,駿馬,還有那頭驢 乙個強大的帝國,一條富饒的絲綢路,乙個本該屬於這裡的將軍,乙個不該屬於這裡的遊子,命運成就了悲壯。天地英...

最短路 最短路徑問題

題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 共有n m 3行,其中 第一行為乙個整數n。第2行...

最短路徑演算法 最短路

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...