題目描述
衛斯理**經常提及外星人,比如藍血人。 在土星星球有很多城市,每個城市之間有一條或多條飛行通道, 但是並不是所有的路都是很安全的,每一條路有乙個安全係數 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...