20190925機房測試 不正常國家

2022-05-26 07:48:08 字數 2069 閱讀 2245

有乙個長相驚奇的國家....

可以猜到,這個國家有n個城市,每個城市之間有且僅有一條通路

可以猜到,這個國家是長在樹上的

可以猜到,首都是1號節點

可以猜到,每個城市管轄他子樹中的所有城市

可以猜到,每個城市有乙個權值a;,兩個城市通訊難度為兩城市路徑異或和

可以猜到,乙個城市的繁忙度定義為它所管轄的城市中通訊難度最大的兩個城市的通訊難

度可以猜到, 如果兩個城市(x,y)都是在a的子樹中,但是lca(x.y)!=a,那麼這兩個城市不參與a繁忙度的統計

可以猜到,這道題你只需要輸出所有城市的繁忙度即可

可以猜到,這道題是水題....

一句話題意:對於每個點 \(i\),詢問所有路徑 \((x,y)\) 中的最大值

其中,對於路徑 \((x,y)\) ,\(lca(x,y)=i\)

這題可真是啊……打暴力都差點打炸

暴力的思路很簡單

預處理出lca和異或字首和, $\theta (n^2) $ 列舉所有邊

每次更新\(ans_i\)(以 \(i\) 為lca的路徑的異或最大值)

最後輸出每個點的答案即可

暴力**:

#include#define ll long long

using namespace std;

int n,a[100005],u,v;

int xor[100005];

struct edge

edge[400005];

int cnt=0,head[200005];

int ans[100005];

inline void add_edge(int from,int to)

int anc[200005][25],dep[200005];

void dfs1(int u,int fa)

}void dfs2(int next,int fa,int cnt) }}

int lca(int x,int y)

return anc[x][0];

}templateinline void read(t &res)

int main()

dfs1(1,0);

dfs2(1,0,0);

for(register int i=1;i<=n;++i)

int lca=lca(i,j);

int kkk=(xor[i]^xor[j]^a[lca]);

if(kkk>ans[lca]) ans[lca]=kkk;

} }for(register int i=1;i<=n;++i) printf("%d ",ans[i]);

return 0;

}

但 \(\theta (n^2)\) 的列舉,我們顯然是接受不了的

於是我們需要搞一棵trie樹,直接啟發式合併

正解:

#include#define n 100005

using namespace std;

int n,x,y,a[n],ans[n];

int size[n],son[n],w[n];

int ndsum,root[n],nxt[n*31][2],temp=30;

struct edge

edge[n<<1];

int cnt=1,head[n];

void add_edge(int from,int to)

templateinline void read(t &res)

void df1(int u,int fa)

}void ii(int u,int fa,int rot)

}void qq(int u,int fa,int rot)

}void dfs2(int u,int fa)

}int main()

df1(1,0);

dfs2(1,0);

for(int i=1;i<=n;++i) printf("%d ",ans[i]);

return 0;

}

20190925機房測試 不正常序列

我們定義乙個不正常數列 f 1 1 f i a m b i c mod 1e9 7 其中,m是指數列 的中位數 如果數列一共有偶數項,那麼我們定義較小的那個為他的中位數 對於給定的a,b,c和n,求數列f i 之和一句話題意 實時更新數列並查詢數列中位數 很顯然,我們可以用兩個堆,儲存這個數列的前半...

20190925機房測試 不正常團夥

有n個人站成一行,每個人有乙個魅力值 相同魅力值的人會形成乙個團夥,定義乙個團夥正常當且僅當團夥人數為2 你的任務是回答m個詢問,每次詢問乙個區間 lr 你需要回答這個區間中所有人各自結成團夥後,處於不正常團夥中的人的魅力值之和一句話題意 區間查詢出現次數不為2的所有數字之和 一看到區間查詢出現次數...

串列埠通訊不正常

筆者在 網淘的一塊 轉串列埠模組,才幾元人民幣。看外觀好像質量還不錯,另外傳輸線纜還帶遮蔽。但是拆開模組,發現使用的是繫結的 大約是為了節省生產成本的原因吧,當然繫結 在質量上常規情況下,要比塑料或陶瓷封閉材料的 差。筆者的模組用於arm linux開發,但是經常遇到乙個情況 正常啟動bootloa...