NYOJ 1274 通道安全

2021-07-13 16:05:25 字數 1783 閱讀 7730

/*

通道安全

時間限制:1000 ms  |  記憶體限制:65535 kb

難度:2

描述alpha 機構有自己的一套網路系統進行資訊傳送。情報員 a 位於節點 1,他準備將乙份情報 傳送給位於節點 n 的情報部門。

可是由於最近國際紛爭,戰事不斷,很多通道都有可能被遭到監 視或破壞。 經過測試分析,alpha 情報系統獲得了

網路中每段通道安全可靠性的概率,情報員 a 決定選 擇一條安全性最高,即概率最大的通道路徑進行傳送情報。

你能幫情報員 a 找到這條通道路徑嗎?

輸入第一行: t 表示以下有 t 組測試資料 ( 1≤t ≤8 )

對每組測試資料:

第一行:n m 分別表示網路中的節點數和通道數 (1<=n<=10000,1<=m<=50000)

接下來有 m 行, 每行包含三個整數 i,j,p,表示節點 i 與節點 j 之間有一條通道,其信

道安全可靠性的概率為 p%。 ( 1<=i, j<=n 1<=p<=100)

輸出每組測試資料,輸出佔一行,乙個實數 即情報傳送到達節點 n 的最高概率,精確到小數點後

6 位。

樣例輸入

15 7

5 2 100

3 5 80

2 3 70

2 1 50

3 4 90

4 1 85

3 1 70

樣例輸出

61.200000

初始化: d陣列全部賦值為inf(無窮大);p陣列全部賦值為s(即源點),或者賦值為-1,表示還沒有知道前驅

然後d[s]=0;  表示源點不用求最短路徑,或者說最短路就是0。將源點入隊;

(另外記住在整個演算法中有頂點入隊了要記得標記vis陣列,有頂點出隊了記得消除那個標記)

佇列+鬆弛操作

讀取隊頭頂點u,並將隊頭頂點u出隊(記得消除標記);將與點u相連的所有點v進行鬆弛操作,如果能更新估計值(即令d[v]變小),那麼就更新,另外,如果點v沒有在佇列中,那麼要將點v入隊(記得標記),如果已經在佇列中了,那麼就不用入隊*/

讀一遍題 首先肯定就會想到最短路型別的題吧!

確實,求最大值,利用求最短路的演算法spfa+鄰接表走一遍最大路徑。

因為求的概率,所以權值存數的時候存的都是小數,c/100 即概率。最後得到的結果*100即為答案

#include #include #include using namespace std;

const int inf = 0x3f3f3f3f;

const int max_n = 10002;

struct node

edge[max_n*10];

int head[max_n];

bool vis[max_n];

double dis[max_n];

int n,m,num;

void add_edge(int u,int v,double w)

void spfa()

memset(vis,false,sizeof(vis));

dis[1] = 1.0;

vis[1] = true;

q.push(1);

while(!q.empty())

{ u = q.front();

q.pop();

vis[u] = false;

for(i=head[u];i!=-1;i=edge[i].next)

{ v = edge[i].v;

double w = edge[i].w;

if(dis[v]

通道安全 SPFA

輸入 第一行 t 表示以下有 t 組測試資料 1 t 8 對每組測試資料 第一行 n m 分別表示網路中的節點數和通道數 1 n 10000,1 m 50000 接下來有 m 行,每行包含三個整數 i,j,p,表示節點 i 與節點 j 之間有一條通道,其信 道安全可靠性的概率為 p 1 i,j n ...

通道安全(SPFA演算法鄰接表)大致模板

通道安全 時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 alpha 機構有自己的一套網路系統進行資訊傳送。情報員 a 位於節點 1,他準備將乙份情報 傳送給位於節點 n 的情報部門。可是由於最近國際紛爭,戰事不斷,很多通道都有可能被遭到監 視或破壞。經過測試分析,alpha...

解決「未能建立 SSL TLS 安全通道」異常

之前寫了乙個桌面程式,程式會間歇性訪問某個https介面,一直用的好好的,今天突然報錯了,異常就發生在訪問介面的地方,曰 請求被中止,未能建立 ssl tls 安全通道。另外有台電腦也有跑該程式,也是同樣的報錯,看來是介面方改動過什麼了。搜尋一番,原因應該是,介面方變更了安全協議,而客戶端並未啟用該...