zzuli 2179 緊急營救

2021-08-07 04:28:27 字數 1350 閱讀 6976

冷鋒在非洲完成任務後回到了狼牙特種作戰部隊。我們知道在戰狼二結尾,冷鋒正在北極執行任務,而部隊發現了龍小雲在c國的訊息,讓冷鋒盡快趕往c國。我們知道現在地球上共有n個國家和地區,編號分別為1,2,3...n。國家與國家之間的可能通航班(可能不止一次),也可能沒有通航班。共有m次航班,冷鋒已經知道了這m次航班的資訊(起點 終點,時間)北極的編號是1,c國的編號是n。

而冷峰身為超級英雄一樣的的存在,他有一次將航班的時間降為零的能力。

樣例數t(t<=10),接下來又t組樣例。 每組樣例先輸入n , m(n<=1000 , m<=n*(n-1)/2)。

下面m行航班的資訊,分別為start , end , time(time <= 100000).表示start和end兩地可以互相到達。

對每組樣例,輸出冷鋒到達c國的最短時間,若不能到達輸出 "impossible"。3

3 1

1 2 1 4

3 1 2 4

2 3 1

2 4 4

3 31 2 100000

2 3 1

1 3 2

impossible 4

0思路:  可以求出起點到所有點的最短路和終點到所有點的最短路,用dis1[maxn],dis2[maxn]表示,現在

考慮列舉每一條邊。對於邊(u , v),如果兩點有值的話我們就可以嘗試將它的時間降為0,那麼

ans = min(ans , min(dis1[u]+dis2[v] , dis1[v]+dis2[u]))。列舉每一條邊,取最小就好了。

#include
using namespace std;

#define n 1005

#define nn 500000

int mp[n][n],dist1[n],dist2[n],vis[n],n;

void dij(int s,int dist)

vis[s]=1;

for(j=1; jdist[i]&&!vis[i])

}vis[k]=1;

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

}}int main()

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

dij(1,dist1);

dij(n,dist2);

int ans=1e9;

for(i=1; i<=n-1; i++)

for(j=i+1; j<=n; j++)

if(ans>=1e9)

puts("impossible");

else

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

}return 0;

}

2 17 訊號同步程式設計

1.基本概念 程序間的同步是指一組併發程序進行互相合作,互相等待,使得各程序按照一定的順序執行的過程。2.生產者與消費者問題 2.1 訊號量sem val初始值設為0 2.2 生產者每生產好一件產品,就sem val 1 釋放訊號量 2.3 消費者開始因sem val 0而阻塞,當sem val 0...

Java學習2 17 事件

確定事件 事件監聽 繫結 actionlistener,mouselistener,keylistener,windowlistener eg 簡單的button按鈕觸發事件導致窗體改變顏色 可以用內部類來實現事件,再繫結 1.在構造器裡面設定。this.setlayout new flowlayo...

實現演算法2 17的程式

algo2 8.cpp 實現演算法2.17的程式 include c1.h define n 2 typedef char elemtype include c2 3.h include func2 2.cpp include bo2 32.cpp include func2 3.cpp 包括equ...