給出n
≤100
n\leq100
n≤100,m
≤4500
m\leq4500
m≤4500
的無向圖,權值c
≤1000
c\leq1000
c≤1000
,然後求問對於每個點v
vv,求i(v
)=∑s
≠v,s
≠tcs
,t(v
)cs,
ti(v)=\sum_\frac(v)}}
i(v)=∑
s̸=
v,s̸
=t
cs,t
cs,
t(v
),c s,
tc_
cs,t
定義為s,t
s,ts,
t路徑上的最短路數,cs,
t(v)
c_(v)
cs,t(
v)定義為經過v
vv的s,t
s,ts,
t路徑上最短路方案數。
由於n
nn很小,直接flo
yd
floyd
floy
d求出兩點之間的最短距離,同時統計出所有點對的方案數。然後列舉每個點,再列舉所有的不為這個點的互異點對,計算這個點的貢獻。
#includeusing namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const ll inf=long_long_max;
const int n=105;
int mp[n][n];
ll f[n][n];
double ans[n];
int main()
} for(int i=1;i<=m;i++)
for(int k=1;k<=n;k++)
else if(mp[i][k]+mp[k][j]==mp[i][j])
}} }
for(int i=1;i<=n;i++)
}} }
for(int i=1;i<=n;i++)
printf("%.3lf\n",ans[i]);
return 0;
}
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...