1491 NOI2007 社交網路

2021-08-05 19:23:59 字數 718 閱讀 5944

題目鏈結

題目大意:n點m邊無向圖,cs,t表示從s到t的不同的最短路的數目,cs,t(v)表示經過v從s到t的最短路數目

求每個點的i

題解:比較*****的最短路計數問題 w[

i][j

]表示i

−−j的

最短路長

度 p[

i][j

]表示i

−−j的

最短路條

數 對p的計算需要用乘法原理,這個比較顯然

然後列舉每個點,計算其的貢獻

我的收穫:

#include 

#include

#include

using

namespace

std;

const

int m=105;

int n,m,x,y,z;

long

long w[m][m];

double p[m][m],ans[m];

void floyed()

else

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

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

}}void getans()

}void work()

void init()

}int main()



BZOJ 1491 NOI2007 社交網路

顯然這是一道要求多源最短路的題目,資料範圍很小,目測用弗洛伊德演算法。由題意,先求出各個點之間的最短路徑,同時利用乘法原理,計算出由 i 到 j 之間的最短路徑個數。如果又發現了一條最短路,由乘法原理計算增加的路徑個數再加上即可。我寫的 沒有去除自己到自己的路徑,因此需清空,但也可在 floyd 中...

BZOJ 1491 NOI2007 社交網路

傳送門 資料範圍很小,我們考慮floyd。要求的是路徑條數,所以我們在floyd的時候直接預處理出兩點之間的路徑條數。用num i j 表示,然後floyd的時候,如果dis i j include include include using namespace std const int maxn...

BZOJ 1491 NOI2007 社交網路

鏈結 我是鏈結,點我呀 題意 在這裡輸入題意 題解 floyd演算法 算出任意兩點之間的最短路,以及最短路的條數。然後三重迴圈列舉v,s,t就好 看看s到t的最短路徑不經過v 經過的話增加答案貢獻 o n 3 include include define ll long long using nam...