nyoj 115 城市平亂

2021-06-21 14:43:49 字數 1619 閱讀 6589

時間限制:

1000

ms  |  記憶體限制:

65535

kb難度:

4 描述

南將軍統領著n個部隊,這n個部隊分別駐紮在n個不同的城市。

他在用這n個部隊維護著m個城市的治安,這m個城市分別編號從1到m。

現在,小工軍師告訴南將軍,第k號城市發生了**,南將軍從各個部隊都派遣了乙個分隊沿最近路去往**城市平亂。

現在已知在任意兩個城市之間的路行軍所需的時間,你作為南將軍麾下最厲害的程式設計師,請你編寫乙個程式來告訴南將軍第乙個分隊到達叛亂城市所需的時間。

注意,兩個城市之間可能不只一條路。

輸入

第一行輸入乙個整數t,表示測試資料的組數。(t<20)

每組測試資料的第一行是四個整數n,m,p,q(1<=n<=100,n<=m<=1000,m-1<=p<=100000)其中n表示部隊數,m表示城市數,p表示城市之間的路的條數,q表示發生**的城市編號。

隨後的一行是n個整數,表示部隊所在城市的編號。

再之後的p行,每行有三個正整數,a,b,t(1<=a,b<=m,1<=t<=100),表示a,b之間的路如果行軍需要用時為t

資料保證**的城市是可達的。

輸出對於每組測試資料,輸出第一支部隊到達叛亂城市時的時間。每組輸出佔一行

樣例輸入

1

3 8 9 8

1 2 3

1 2 1

2 3 2

1 4 2

2 5 3

3 6 2

4 7 1

5 7 3

5 8 2

6 8 2

樣例輸出

4
用djstra演算法寫,依次找到起始點與終點的最小值進行比較,水過。。

但時間上用時很大,還可以優化(這題也可以用搜尋寫)

#include "iostream"

#include "cstdio"

#include "cstring"

using namespace std;

const int maxn = 1005;

const int inf = 0x3f3f3f3f;

int map[maxn][maxn]; //儲存i點到j的點權值

int low[maxn] ; //用於儲存到各點最短路徑的權值和

int path[maxn];//用於儲存最短路徑下標的陣列,此題沒用到

int n,m;

int min(int a,int b)

vis[pos] = 1;//將目前找到最近的頂點標記

//修正當前最短路徑及距離

for(k = 1 ; k <= n ; k++ )

}}// for(k = 1 ; i <= n ;i++)

// printf("%d ",low[i]);

// printf("\n");

return low[v1];

}int main()

ans=inf;

for(i = 1; i <= k ; i++)

printf("%d\n",ans);

} return 0;

}

nyoj 115 城市平亂

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 南將軍統領著n個部隊,這n個部隊分別駐紮在n個不同的城市。他在用這n個部隊維護著m個城市的治安,這m個城市分別編號從1到m。現在,小工軍師告訴南將軍,第k號城市發生了 南將軍從各個部隊都派遣了乙個分隊沿最近路去往 城市平亂。現在...

NYOJ 115 城市平亂

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 南將軍統領著n個部隊,這n個部隊分別駐紮在n個不同的城市。他在用這n個部隊維護著m個城市的治安,這m個城市分別編號從1到m。現在,小工軍師告訴南將軍,第k號城市發生了 南將軍從各個部隊都派遣了乙個分隊沿最近路去往 城市平亂。現在...

NYOJ 115 城市平亂

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 南將軍統領著n個部隊,這n個部隊分別駐紮在n個不同的城市。他在用這n個部隊維護著m個城市的治安,這m個城市分別編號從1到m。現在,小工軍師告訴南將軍,第k號城市發生了 南將軍從各個部隊都派遣了乙個分隊沿最近路去往 城市平亂。現在...