日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

1491. [NOI2007]社交网络【最短路计数】

發(fā)布時(shí)間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1491. [NOI2007]社交网络【最短路计数】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Description

在社交網(wǎng)絡(luò)(socialnetwork)的研究中,我們常常使用圖論概念去解釋一些社會(huì)現(xiàn)象。不妨看這樣的一個(gè)問(wèn)題。 在一個(gè)社交圈子里有n個(gè)人,人與人之間有不同程度的關(guān)系。我們將這個(gè)關(guān)系網(wǎng)絡(luò)對(duì)應(yīng)到一個(gè)n個(gè)結(jié)點(diǎn)的無(wú)向圖上, 兩個(gè)不同的人若互相認(rèn)識(shí),則在他們對(duì)應(yīng)的結(jié)點(diǎn)之間連接一條無(wú)向邊,并附上一個(gè)正數(shù)權(quán)值c,c越小,表示兩個(gè)人 之間的關(guān)系越密切。我們可以用對(duì)應(yīng)結(jié)點(diǎn)之間的最短路長(zhǎng)度來(lái)衡量?jī)蓚€(gè)人s和t之間的關(guān)系密切程度,注意到最短路 徑上的其他結(jié)點(diǎn)為s和t的聯(lián)系提供了某種便利,即這些結(jié)點(diǎn)對(duì)于s和t之間的聯(lián)系有一定的重要程度。我們可以通過(guò) 統(tǒng)計(jì)經(jīng)過(guò)一個(gè)結(jié)點(diǎn)v的最短路徑的數(shù)目來(lái)衡量該結(jié)點(diǎn)在社交網(wǎng)絡(luò)中的重要程度。考慮到兩個(gè)結(jié)點(diǎn)A和B之間可能會(huì)有 多條最短路徑。我們修改重要程度的定義如下:令Cs,t表示從s到t的不同的最短路的數(shù)目,Cs,t(v)表示經(jīng)過(guò)v從s 到t的最短路的數(shù)目;則定義 為結(jié)點(diǎn)v在社交網(wǎng)絡(luò)中的重要程度。為了使I(v)和Cs,t(v)有意義,我們規(guī)定需要處理的社交網(wǎng)絡(luò)都是連通的無(wú)向圖 ,即任意兩個(gè)結(jié)點(diǎn)之間都有一條有限長(zhǎng)度的最短路徑。現(xiàn)在給出這樣一幅描述社交網(wǎng)絡(luò)的加權(quán)無(wú)向圖,請(qǐng)你求出每 一個(gè)結(jié)點(diǎn)的重要程度。

Input

輸入第一行有兩個(gè)整數(shù)n和m,表示社交網(wǎng)絡(luò)中結(jié)點(diǎn)和無(wú)向邊的數(shù)目。在無(wú)向圖中,我們將所有結(jié)點(diǎn)從1到n進(jìn)行編號(hào) 。接下來(lái)m行,每行用三個(gè)整數(shù)a,b,c描述一條連接結(jié)點(diǎn)a和b,權(quán)值為c的無(wú)向邊。注意任意兩個(gè)結(jié)點(diǎn)之間最多有 一條無(wú)向邊相連,無(wú)向圖中也不會(huì)出現(xiàn)自環(huán)(即不存在一條無(wú)向邊的兩個(gè)端點(diǎn)是相同的結(jié)點(diǎn))。n≤100;m≤4500? ,任意一條邊的權(quán)值 c 是正整數(shù),滿足:1≤c≤1000。所有數(shù)據(jù)中保證給出的無(wú)向圖連通,且任意兩個(gè)結(jié)點(diǎn)之間 的最短路徑數(shù)目不超過(guò) 10^10

Output

輸出包括n行,每行一個(gè)實(shí)數(shù),精確到小數(shù)點(diǎn)后3位。第i行的實(shí)數(shù)表示結(jié)點(diǎn)i在社交網(wǎng)絡(luò)中的重要程度。

Sample Input

4 4
1 2 1
2 3 1
3 4 1
4 1 1

Sample Output

1.000
1.000
1.000
1.000

HINT

社交網(wǎng)絡(luò)如下圖所示。

?

?

對(duì)于 1 號(hào)結(jié)點(diǎn)而言,只有 2 號(hào)到 4 號(hào)結(jié)點(diǎn)和 4 號(hào)到 2 號(hào)結(jié)點(diǎn)的最短路經(jīng)過(guò) 1 號(hào)結(jié)點(diǎn),而 2 號(hào)結(jié)點(diǎn)和 4 號(hào)結(jié) 點(diǎn)之間的最短路又有 2 條。因而根據(jù)定義,1 號(hào)結(jié)點(diǎn)的重要程度計(jì)算為 1/2 + 1/2 = 1 。由于圖的對(duì)稱性,其他 三個(gè)結(jié)點(diǎn)的重要程度也都是 1 。 這個(gè)題唯一的難點(diǎn)就是最短路計(jì)數(shù)的問(wèn)題
我一開(kāi)始口胡的一個(gè)計(jì)數(shù)方法基本是對(duì)的,但有一個(gè)關(guān)鍵的地方出了點(diǎn)問(wèn)題
當(dāng)可以更新時(shí),用中介點(diǎn)兩端的條數(shù)乘起來(lái)更新就好了(看代碼非常好理解) 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define N (100+10) 5 using namespace std; 6 long long dis[N][N],dis_cnt[N][N]; 7 long long n,m,u,v,l; 8 9 void Floyd() 10 { 11 for (int k=1;k<=n;++k) 12 for (int i=1;i<=n;++i) 13 for (int j=1;j<=n;++j) 14 { 15 if (dis[i][k]+dis[k][j]==dis[i][j]) 16 dis_cnt[i][j]+=dis_cnt[i][k]*dis_cnt[k][j]; 17 if (dis[i][k]+dis[k][j]<dis[i][j]) 18 { 19 dis[i][j]=dis[i][k]+dis[k][j]; 20 dis_cnt[i][j]=dis_cnt[i][k]*dis_cnt[k][j]; 21 } 22 } 23 } 24 25 double Count(int v) 26 { 27 double ans=0; 28 for (int s=1;s<=n;++s) 29 for (int t=1;t<=n;++t) 30 if (s!=v && t!=v && s!=t && dis[s][v]+dis[v][t]==dis[s][t]) 31 ans+=dis_cnt[s][v]*dis_cnt[v][t]*1.0/dis_cnt[s][t]; 32 return ans; 33 } 34 35 int main() 36 { 37 memset(dis,0x3f,sizeof(dis)); 38 scanf("%lld%lld",&n,&m); 39 for (int i=1;i<=m;++i) 40 { 41 scanf("%lld%lld%lld",&u,&v,&l); 42 dis[u][v]=dis[v][u]=l; 43 dis_cnt[u][v]=dis_cnt[v][u]=1; 44 } 45 Floyd(); 46 for (int i=1;i<=n;++i) 47 printf("%0.3lf\n",Count(i)); 48 }

轉(zhuǎn)載于:https://www.cnblogs.com/refun/p/8680843.html

總結(jié)

以上是生活随笔為你收集整理的1491. [NOI2007]社交网络【最短路计数】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。