1009 安全路徑

2021-10-01 23:06:34 字數 1563 閱讀 1407

題目描述

衛斯理**經常提及外星人,比如藍血人。 在土星星球有很多城市,每個城市之間有一條或多條飛行通道, 但是並不是所有的路都是很安全的,每一條路有乙個安全係數 s,s 是在 0和1 間的實數 (包括0 , 1) ,一條從 u 到 v 的通道 p 的安全度為 safe(p) = s(e1)*s(e2)…*s(ek) e1,e2,ek是p 上的邊 ,現在藍血人想出去旅遊,面對這這麼多的路,他想找一條最安全的路。但是藍血人的數學不好,想請你幫忙 ^_^ --

輸入

輸入包括多個測試例項,每個例項包括: 

第一行: 乙個整數 n。 n 表示城市的個數 n<=1000; 

接著是乙個 n*n 的矩陣表示兩個城市之間的安全係數, (0可以理解為那兩個城市之間沒有直接的通道 )。 

接著是乙個整數m (m<=100)表示若干個藍血人要旅遊的路線 ,下面每行有兩個數字,表示藍血人所在的城市和要去的城市。 

輸出

如果藍血人無法達到他的目的地,輸出 "what a pity!" , 

其他的輸出這兩個城市之間的最安全道路的安全係數,保留三位小數。 

樣例輸入

3

1 0.5 0.5

0.5 1 0.4

0.5 0.4 1

3 1 2

2 31 3

樣例輸出

0.500

0.400

0.500

【思路】由於只求少許兩點之間的"最短距離",用floyd時間複雜度大了,會時間超限,用dijstra即可. 

其中weight[i]存放的是從起點到第i個頂點的"最短距離"(這裡去權值最大),每次更新以後用新的頂點去探測其他沒有被訪問過頂點,取"最值"更新.

} if(u==-1)//起點與剩下的點不連通

return -1;

if(u==y)//找到到達終點的最短路徑

return 1;

vis[u]=true;

for(int v=1;v<=n;v++)

} }int main(void)

} int m;

scanf("%d",&m);

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

}return 0;

}

bzoj1576 安全路徑

先建立最短路徑樹 即跑dij每乙個點向更新他的點連邊 考慮乙個點的答案路徑一定要走過且僅走過一條非樹邊,列舉非樹邊 x,y 對於乙個點 k,如果它在 x lca 上 y lca 的路徑上同理 那麼答案可以更改為s y len x,y s x s k 前三個不受k的影響,因此越小越好,即將每一條邊按照...

USACO 2009 JAN GOLD 安全路徑

問題描述 gremlins最近在農場上氾濫,它們經常會阻止牛們從農莊 牛棚 1 走到別的牛棚 牛 i的目的地是牛棚 i 每乙個gremlin只認識牛 i並且知道牛 i一般走到牛棚 i的最短路經。所以它們在牛 i到牛棚 i之前的最後一條牛路上等牛 i,當然,牛不願意遇到gremlins,所以準備找一條...

全路徑搜尋策略

1 為了能重用已有dijkstrasearcher的一些函式,新增乙個類directedgraph繼承自igraph,重寫虛函式。directedgraph中有node類和edge類。node類需要std vectoraedge ids欄位,edge類需要unsigned snode id unsi...