Vijos 社交網路 Floyd擴充套件

2021-09-05 10:44:19 字數 2244 閱讀 2429

在社交網路(social network)的研究中,我們常常使用圖論概念去解釋一些社會現象。

不妨看這樣的乙個問題。在乙個社交圈子裡有n個人,人與人之間有不同程度的關係。我們將這個關係網路對應到乙個n個結點的無向圖上,兩個不同的人若互相認識,則在他們對應的結點之間連線一條無向邊,並附上乙個正數權值c,c越小,表示兩個人之間的關係越密切。

我們可以用對應結點之間的最短路長度來衡量兩個人s和t之間的關係密切程度,注意到最短路徑上的其他結點為s和t的聯絡提供了某種便利,即這些結點對於s和t之間的聯絡有一定的重要程度。我們可以通過統計經過乙個結點v的最短路徑的數目來衡量該結點在社交網路中的重要程度。

考慮到兩個結點a 和b 之間可能會有多條最短路徑。我們修改重要程度的定義如下:

令cs,t 表示從s 到t 的不同的最短路的數目,cs,t(v)表示經過v從s到t的最短路的數目;則定義

i(v)=∑(s<>v,t<>v)cs,t(v)/cs,t

為結點v 在社交網路中的重要程度。

為了使i(v)和cs,t(v)有意義,我們規定需要處理的社交網路都是連通的無向圖,即任意兩個結點之間都有一條有限長度的最短路徑。現在給出這樣一幅描述社交網路的加權無向圖,請你求出每乙個結點的重要程度。

輸入檔案中第一行有兩個整數,n和m,表示社交網路中結點和無向邊的數目。在無向圖中,我們將所有結點從1 到n 進行編號。接下來m 行,每行用三個整數a,b,c描述一條連線結點a和b,權值為c的無向邊。注意任意兩個結點之間最多有一條無向邊相連,無向圖中也不會出現自環(即不存在一條無向邊的兩個端點是相同的結點)。

輸出檔案包括n行,每行乙個實數,精確到小數點後3位。第i行的實數表示結點i在社交網路中的重要程度。

4 4

1 2 1

2 3 1

3 4 1

4 1 1

1.000

1.000

1.000

1.000

樣例說明

對於1號結點而言,只有2號到4號結點和4號到2號結點的最短路經過1號結點,而2號結點和4號結點之間的最短路又有2條。因而根據定義,1號結點的重要程度計算為1/2+1/2=1。由於圖的對稱性,其他三個結點的重要程度也都是1。

評分方法

本題沒有部分分,僅當你的程式計算得出的各個結點的重要程度與標準輸出

相差不超過0.001時,才能得到測試點的滿分,否則不得分。

資料規模和約定

50%的資料中:n ≤ 10,m ≤ 45

100%的資料中:n ≤ 100,m ≤ 4500,任意一條邊的權值c 是正整數,滿

足:1 ≤ c ≤ 1000。

所有資料中保證給出的無向圖連通,且任意兩個結點之間的最短路徑數目不

超過10^10。

此題n<=100顯然可以使用floyd來求解.我們把dis[i][j]陣列當做從i到j的最短路的條數,那麼我們在輸入有u,v的一條邊的時候。就應該將dis[u][v]=dis[v][u]=1;因為,如果這條邊確實是的最短路,那麼dis[u][v]=dis[v][u]=1;若以後發現有與之相同的最短路,就將dis加在一起

if(map[j][k]==map[j][i]+map[i][k])

dis[j][k]+=dis[j][i]*dis[i][k];

如果這條邊不是之間的最短路,一定會在以後更新dis[u][v]。

if(map[j][k]>map[j][i]+map[i][k])

最後只要把結果加一下就行了。注意:因為i≠j&&i≠k&&j≠k所以要判斷一下:

if(map[j][k]==map[j][i]+map[i][k]&&i!=j&&j!=k&&i!=k)

#include const int inf = 1e9;

int map[110][110], n;

double ans[110], dis[110][110];

void floyd()

int main()

floyd();

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

printf("%.3f\n", ans[i]);

}return 0;

}

NOI2007T1 社交網路 Floyd求最短路

做法 看完題目之後,可以看出問題主要在於如何求兩點間最短路的方案數和兩點間過某點最短路的方案數,看到n只有100,所以完全可以用o n 3 的floyd演算法預處理,設dis i j 為i到j之間的最短路,c i j 為i到j之間的最短路方案數,用稍微修改的floyd演算法 僅計算i,j,k兩兩不等...

Vijos 最短路上的統計 Floyd

乙個無向圖上,沒有自環,所有邊的權值均為1,對於乙個點對 a,b 我們要把所有a與b之間所有最短路上的點的總個數輸出。第一行n,m,表示n個點,m條邊 接下來m行,每行兩個數a,b,表示a,b之間有條邊 在下來乙個數p,表示問題的個數 接下來p行,每行兩個數a,b,表示詢問a,b 對於每個詢問,輸出...

再看社交網路

社交網路領域的術語 圖譜 一種網狀結構,代表實體 興趣,人 和聯絡。實體就像頻率分量,聯絡就像相位和幅度。興趣圖譜 社交圖譜,從譜中濾出你關心的分量,進而建立聯絡 通訊 聚類 一種演算法,用來從社交網路 資料庫 中根據需求分類,便於提高搜尋的查全率。查全率 一次查詢中需要的和所有的之比 和查準率的關...