NOI2007 社交網路

2022-05-19 10:05:40 字數 1160 閱讀 3165

題目:洛谷p2047、bzoj1491、vijos p1591、codevs1796。

題目大意:給你一張帶權無向圖。令$c_$表示從s到t的不同的最短路的數目,$c_(v)$表示經過v從s到t的不同的最短路的數目。則定義:

為節點v的重要程度。問每個節點的重要程度(保留3位小數)。

解題思路:用floyd求出每個節點的最短路時,可以順便統計出兩點見最短路的數量。

設$num_$表示i到j的最短路的數量(即$c_$),$dis_$表示i到j的最短路長度,則

$num_=num_*num_$(當$dis_>dis_+dis_$時)

$num_=num_+num_*num_$(當$dis_=dis_+dis_$時)

初始時,對於每兩個有邊直接相連的點i和j,$num_=1$。

然後我們發現,若s為起點t為終點,則經過v的最短路條數為s到v的最短路條數乘v到t的最短路條數,即$c_(v)=c_*c_$。

那麼列舉起點和終點,代入式子計算即可。

時間複雜度$o(n^3)$。

c++ code:

#include#include#define ll long long

#define n 105

int n,m;

ll dp[n][n],num[n][n];

int main()

for(int i=1;i<=n;++i)dp[i][i]=0;

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

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

if(i!=k)

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

if(i!=j&&j!=k)else

if(dp[i][j]==dp[i][k]+dp[k][j])num[i][j]+=num[i][k]*num[k][j];

} double ans;

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

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

} return 0;

}

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 社交網路

在社交網路 social network 的研究中,我們常常使用圖論概念去解釋一些社會現象。不妨看這樣的乙個問題。在乙個社交圈子裡有n個人,人與人之間有不同程度的關係。我 們將這個關係網路對應到乙個n個結點的無向圖上,兩個不同的人若互相認識,則在他們對應的結點之間連線一條無向邊,並附上乙個正數權值c...