bzoj 1602 牧場行走

2022-02-27 11:20:34 字數 1255 閱讀 6193

time limit: 5 sec  memory limit: 64 mb

submit: 2013  solved: 1059

n頭牛(2<=n<=1000)別人被標記為1到n,在同樣被標記1到n的n塊土地上吃草,第i頭牛在第i塊牧場吃草。 這n塊土地被n-1條邊連線。 奶牛可以在邊上行走,第i條邊連線第ai,bi塊牧場,第i條邊的長度是li(1<=li<=10000)。 這些邊被安排成任意兩頭奶牛都可以通過這些邊到達的情況,所以說這是一棵樹。 這些奶牛是非常喜歡交際的,經常會去互相訪問,他們想讓你去幫助他們計算q(1<=q<=1000)對奶牛之間的距離。

*第一行:兩個被空格隔開的整數:n和q

*第二行到第n行:第i+1行有兩個被空格隔開的整數:ai,bi,li

*第n+1行到n+q行:每一行有兩個空格隔開的整數:p1,p2,表示兩頭奶牛的編號。

*第1行到第q行:每行輸出乙個數,表示那兩頭奶牛之間的距離。

4 22 1 2

4 3 2

1 4 3

1 23 227

資格賽樹上求兩點間距離,倍增求lca順帶維護倍增距離即可。

1 #include2 #include3

#define maxn 20005

4using

namespace

std;56

struct

edgee[maxn];910

inttot,first[maxn],n,q,a,b,c;

11void insert(int u,int v,int

len)

1819

bool book[maxn]; int depth[maxn],fa[maxn][20],cost[maxn][20

];20

void dfs(int

now)33}

34}3536

int lca(int u,int

v)49

50int

main()

5859 book[1] = true

;60 depth[1] = 1

;61 dfs(1

);62

63//

for(int i = 0;i <= n;i++)cout << endl;

67//}68

69for(int i = 0;i < q;i++)

7374

return0;

75 }

這麼水的題居然還許可權= =

bzoj 3437 小P的牧場

方程不難寫出fi max j 0 i 其中w j i 表示前 i 個牧場中,在 i處建立最後乙個檢查站,在 j 處建立倒數第二個檢查站的最小化費 這裡的w可以用兩個字首和求出,s1 i b i s2 i 1 a i 1 2 a i 2 3 a i 3 i 1 a 1 那麼w l,r s2 r s 2...

bzoj3437 小P的牧場

description 小p在mc裡有n個牧場,自西向東呈一字形排列 自西向東用1 n編號 於是他就煩惱了 為了控制這n個牧場,他需要在某些牧場上面建立控制站,每個牧場上只能建立乙個控制站,每個控制站控制的牧場是它所在的牧場一直到它西邊第乙個控制站的所有牧場 它西邊第乙個控制站所在的牧場不被控制 如...

BZOJ3437 小p的牧場

小p 在mc 裡有n 個牧場,自西向東呈一字形排列 自西向東用1 n 編號 於是他就煩惱了 為了控制這n 個牧場,他需要在某些牧場上面建立控制站,每個牧場上只能建立乙個控制站,每個控制站控制的牧場是它所在的牧場一直到它西邊第乙個控制站的所有牧場 它西邊第乙個控制站所在的牧場不被控制 如果它西邊不存在...