byteland王國準備在各伺服器間建立大型網路並提供多種服務。
網路由n臺伺服器組成,用雙向的線連線。兩台伺服器之間最多只能有一條線直接連線,同時,每台伺服器最多只能和10臺伺服器直接連線,但是任意兩台伺服器間必然存在一條路徑將它們連線在一起。每條傳輸線都有乙個固定傳輸的速度。δ(v, w)表示伺服器v和w之間的最短路徑長度,且對任意的v有δ(v, v)=0。
有些伺服器比別的伺服器提供更多的服務,它們的重要程度要高一些。我們用r(v)表示伺服器v的重要程度(rank)。rank越高的伺服器越重要。
每台伺服器都會儲存它附近的伺服器的資訊。當然,不是所有伺服器的資訊都存,只有感興趣的伺服器資訊才會被儲存。伺服器v對伺服器w感興趣是指,不存在伺服器u滿足,r(u)>r(w)且δ(v, u)<=δ(v, w)。
舉個例子來說,所有具有最高rank的伺服器都會被別的伺服器感興趣。如果v是一台具有最高rank的伺服器,由於δ(v, v)=0,所以v只對具有最高rank的伺服器感興趣。我們定義b(v)為v感興趣的伺服器的集合。
我們希望計算所有伺服器儲存的資訊量,即所有伺服器的|b(v)|之和。byteland王國並不希望儲存大量的資料,所以所有伺服器儲存的資料量(|b(v)|之和)不會超過30n。
你的任務是寫乙個程式,讀入byteland王國的網路分布,計算所有伺服器儲存的資料量。
顯然暴力做法就是跑n
n遍單元最短路。
考慮到答案不會太大(所有伺服器儲存的資料量(∣b(
v)∣∣
b(v)
∣之和)不會超過30n3
0n),所以可以考慮對暴力演算法優化。設f[
x][i
]f[x
][i]
表示距離點x
x最近的ran
k≥ir
ank≥
i的點的距離。
那麼如果我們在跑點s
s的最短路時,最短路跑到點u
u,接下來要轉移到點v
v,但是有dis
[s][
v]v][r
ank[
s]+1
]dis
[s][
v]v][r
ank[
s]+1
],那麼就有di
s[s,
v]=d
is[s
,u]+
dis[
v,u]
≥f[r
ank[
s]+1
][v]
+dis
[u,v
]≥f[
rank
[s]+
1][u
]dis
[s,v
]=di
s[s,
u]+d
is[v
,u]≥
f[ra
nk[s
]+1]
[v]+
dis[
u,v]
≥f[r
ank[
s]+1
][u]
所以這樣顯然不會更新答案。
所以我們根本不必把v
v扔進(優先)佇列裡。
這樣就可以過了。
#include
#include
#include
#define mp make_pair
using
namespace std;
const
int n=
30010
;int n,m,tot,ans,rank[n]
,f[n][15
],dis[n]
,head[n]
;bool vis[n]
,flag[n]
;queue<
int> r[15]
;struct edge
e[n*10]
;void
add(
int from,
int to,
int dis)
void
dij_rank
(int rk)
while
(q.size()
)}}}
void
dij(
int s)
q.pop();
if(vis[u]
)continue
; vis[u]=1
;for
(int i=head[u]
;~i;i=e[i]
.next)}}
}int
main()
for(
int i=
1;i<=m;i++
)for
(int i=
10;i>=
1;i--
)for
(int i=
1;i<=n;
++i)
dij(i)
;printf
("%d"
,ans)
;return0;
}
伺服器儲存資訊問題 差分約束
下面是題面。問題描述 byteland 王國準備在各伺服器間建立大型網路並提供多種服務。網路由 n 臺伺服器組成,用雙向的線連線。兩台伺服器之間最多只能有一條線直接連線,同時,每台伺服器最多只能和 10 臺伺服器直接連線,但是任意兩台伺服器間必然存在一條路徑將它們連線在一起。每條傳輸線都有乙個固定傳...
最經濟方案 談P2P電影伺服器
最近在論壇上看到大家討論架設電影 伺服器的問題,其實這個在大中型網咖中幾乎是必備的專案之一,本人在廣州 武漢等地的數個網咖上網時都看到這些網咖已經擁有了自己的電影 伺服器,並且還請專業的 開發人員設計了一套很漂亮的頁面,不少網民來網咖也是衝著 伺服器上的電影而來,所以投資建立乙個自己的電影 伺服器現...
儲存過程 獲取連線SQL伺服器的資訊
if exists select from dbo.sysobjects where id object id n dbo p getlinkinfo and objectproperty id,n isprocedure 1 drop procedure dbo p getlinkinfo go ...