題目鏈結
題目大意: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...