NOI2007 社交網路

2022-05-21 07:21:09 字數 1367 閱讀 3310

在社交網路(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的最短路的數目;則定義 

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

為了使i(v)和cs,t(v)有意義,我們規定需要處理的社交網路都是連通的無向圖,即任意兩個結點之間都有一條有限長度的最短路徑。 

現在給出這樣一幅描述社交網路s的加權無向圖,請你求出每乙個結點的重要程度。

輸入中第一行有兩個整數,n和m,表示社交網路中結點和無向邊的數目。在無向圖中,我們將所有結點從1到n進行編號。 

接下來m行,每行用三個整數a, b, c描述一條連線結點a和b,權值為c的無向邊。注意任意兩個結點之間最多有一條無向邊相連,無向圖中也不會出現自環(即不存在一條無向邊的兩個端點是相同的結點)。

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

題解:**:

#include#include

#include

#include

#include

#include

const

int maxn=150

;using

namespace

std;

intdis[maxn][maxn];

double

num[maxn][maxn];

double

ans[maxn];

intn,m;

void

cl()

intmain()

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

else

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

num[i][j]+=num[i][k]*num[k][j];}}

}for(int k=1;k<=n;k++)}}

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

%0.3f\n

",ans[i]);

}

NOI2007 社交網路

bzoj1491 noi2007 社交網路 看到資料規模,最先想到的是floyd,但在統計方案的地方卡住了。瀏覽了幾篇題解,得到了一點啟示。在floyd過程中,列舉k為中轉點 如果當前需要更新,那麼經過k的最短路條數附初始值為兩邊 i k和k j 的條數之積 乘法原理 如果恰巧當前就是一條最短路,那...

noi2007 社交網路

給定乙個由n個點組成的無向圖,求所有點的 v x sum a ne b 其中 c a,b 表示 a,b 這條最短路路徑的條數,c a,b v 表示 a,b 最短路中經過v的最短路的條數。n le 100 這道題要分三個子問題 求出ab距離,求出ab最短路條數,求出ab最短路中,經過v的條數。如果第二...

NOI2007 社交網路

題目 洛谷p2047 bzoj1491 vijos p1591 codevs1796。題目大意 給你一張帶權無向圖。令 c 表示從s到t的不同的最短路的數目,c v 表示經過v從s到t的不同的最短路的數目。則定義 為節點v的重要程度。問每個節點的重要程度 保留3位小數 解題思路 用floyd求出每個...