做法:看完題目之後,可以看出問題主要在於如何求兩點間最短路的方案數和兩點間過某點最短路的方案數,看到n只有100,所以完全可以用o(n^3)的floyd演算法預處理,設dis[i][j]為i到j之間的最短路,c[i][j]為i到j之間的最短路方案數,用稍微修改的floyd演算法(僅計算i,j,k兩兩不等的情況,想一想為什麼)計算出這兩個陣列,具體計算方法見**。於是可以知道,當dis[s][v]+dis[v][t]等於dis[s][t]時,說明v在從s到t的某些最短路上,則cs,t(v)=c[s][v]*c[v][t],然後再累加即可。
以下是本人**:
#include #include #include #include #include #include using namespace std;
int n,m,tot=0,first[110]=;
long long dis[110][110],inf;
double c[110][110];
bool vis[110];
void floyd()
{ for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{if (i==j||i==k||k==j) continue;
if (dis[i][k]+dis[k][j]
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求出每個...