COGS1672 難存的情緣

2022-05-27 17:03:12 字數 2941 閱讀 7734

一天機房的夜晚,無數人在mc裡奮鬥著。。。

大家都知道礦產對於mc來說是多麼的重要,但由於礦越挖越少,勇士們不得不跑到更遠的地方挖礦,但這樣路途上就會花費相當大的時間,導致挖礦效率底下。

cjj提議修一條鐵路,大家一致同意。

zjmfrank2012負責繪製出乙個礦道地圖,這個地圖包括家(當然這也是乙個礦,畢竟不把家掏空我們是不會走的),和無數個礦,所以大家應該可以想出這是乙個無向無環圖,也就是一棵樹。

digital_t和cstdio負責鋪鐵路。。所以這裡沒他們什麼事,兩位可以勞作去了。

這個時候song526210932和rmb突然發現有的礦道會刷怪,並且怪的數量會發生變化。作為採礦主力,他們想知道從乙個礦到另乙個礦的路上哪一段會最困難。。。(困難值用zjm的死亡次數表示)。

輸入檔案的第一行有乙個整數n,代表礦的數量。礦的編號是1到n。

接下來n-1行每行有三個整數a,b,c,代表第i號礦和第j號礦之間有一條路,在初始時這條路的困難值為c。

接下來有若干行,每行是「change i ti」或者「query a b」,前者代表把第i條路(路按所給順序從1到m編號)的困難值修改為ti,後者代表查詢a到b所經過的道路中的最大困難值。

輸入資料以一行「done」結束。

對每個「query」操作,輸出一行乙個正整數,即最大困難值。

實在是讓人無語的背景改變,順便膜拜一下夢迪神牛orzzzzzzzz。

最基本的樹鏈剖分。

1 #include 2 #include 3 #include 4 #include 5 #include 6

const

int maxn=100000+1000;7

using

namespace

std;

8struct

edge9;

13int d[maxn][3],edge=0,n,root;//

用來記錄邊的屬性

14int siz[maxn],son[maxn];//

子樹大小和重兒子

15int fa[maxn],dep[maxn],z;//

父親和深度

16int

w[maxn],top[maxn],tree[maxn];

17char str[55

];18 vectormap[maxn];

1920 inline void

init();

21 inline void

work();

22 inline void dfs(int u);//

第一次dfs

23 inline void addedge(int u,int v);//

加邊 24 inline void make_tree(int u,int tp);//

第二次dfs

25 inline void update(int root,int l,int r,int num,int c);//

c是變更值

26 inline int read();//

讀入函式

27 inline int find(int a,int

b);28 inline int maxi(int root,int l,int r,int l1,int

l2);

2930

31 inline void addedge(int u,int

v)32

);35

}36 inline void dfs(int u)//

第一次dfs

3752}53

}54//建樹操作

55 inline void make_tree(int u,int

tp)56 67

}68//修改操作

69 inline void update(int root,int l,int r,int num,int

c)70 73

int mid=(l+r)/2;74

//遞迴修改

75 update(root*2

,l,mid,num,c);

76 update(root*2+1,mid+1

,r,num,c);

77 tree[root]=max(tree[root*2],tree[root*2+1

]);78

} 79 inline void

init()

8095 dfs(root);//

第一次96

make_tree(root,root);

97for (i=1;i)98

102return

;103

}104 inline int

read()

105

112 inline int maxi(int root,int l,int r,int l1,int

r1)113

119//

進行從a到b的詢問

120 inline int find(int a,int

b)121

130 temp=max(temp,maxi(1,1

,z,w[f1],w[a]));

131 a=fa[f1];f1=top[a];//

向上傳遞

132}

133if (a==b) return

temp;

134if (dep[a]>dep[b]) swap(a,b);

135return max(temp,maxi(1,1

,z,w[son[a]],w[b]));

136}

137 inline void

work()

138146

return

;147

}148

intmain()

149

訓練題 分隊 P1672

每年的cqoi比賽結束後都會組織選手參加一次遊玩活動。由於人數眾多,通常會把選手分成兩隊出發。組委會為了和諧,想盡量把比較熟悉的選手分在同一隊。我們用 友好度 乙個正整數值 來表示某兩位選手之間的熟悉程度,友好度越大,則兩名選手越熟悉。而 和諧度 定義為兩隊中熟悉程度最低的那對選手的友好度。現在告訴...

1672 最富有客戶的資產總量

1672.最富有客戶的資產總量 給你乙個 m x n 的整數網格 accounts 其中 accounts i j 是第 i 位客戶在第 j 家銀行託管的資產數量。返回最富有客戶所擁有的 資產總量 客戶的 資產總量 就是他們在各家銀行託管的資產數量之和。最富有客戶就是 資產總量 最大的客戶。示例 1...

1672 最富有客戶的資產總量

給你乙個 m x n 的整數網格 accounts 其中 accounts i j 是第 i 位客戶在第 j 家銀行託管的資產數量。返回最富有客戶所擁有的 資產總量 客戶的 資產總量 就是他們在各家銀行託管的資產數量之和。最富有客戶就是 資產總量 最大的客戶。示例 1 輸入 accounts 1,2...