洛谷P5443 APIO2019 橋梁

2022-05-05 19:39:10 字數 2053 閱讀 2287

apio場外選手沒事休閒做題。(看了yyb的題解才把這題做出來)

對操作進行分塊,把每\(\text\)個操作分成1組,裡面大概有2類:沒被修改過的和被修改過的。

接著對塊內詢問進行離線。

對於沒有修改過的:我們可以直接排序然後把他們加入並查集。

對於修改過的,我們看他的時間是否大於當前操作的時間,如果大於則加入原來的權值,如果小於則用修改後的權值。

最後答案其實就是查一下連通塊的大小。

再注意一點,因為這裡的並查集是支援撤回的,所以並不能路徑壓縮。

// luogu-judger-enable-o2

#include const int maxm = 1e5 + 10;

inline void _swap(int& a,int& b)

templateinline void read(t& res)

int n, m, i, j, k, tote, totq, top, lastop, sz;

int fa[maxm], sz[maxm], id[maxm], ans[maxm], r[maxm];

std::pairsta[maxm];

int find(int u)

inline void union(int u,int v)

bool vis[maxm];

struct edge

edge(int _u,int _v,int _w,int _id)

inline friend bool operator < (edge a,edge b)

} e[maxm], e1[maxm], e2[maxm];

struct node

node(int _id,int _t,int _b,int _r)

inline friend bool operator < (node a,node b)

} q[maxm], x[maxm], y[maxm];

inline void solve()

std::sort(y + 1,y + tot2 + 1);

for(int i = 1;i <= m;i++)

id[ e[i].id ] = i;

int j = 1;

for(int i = 1;i <= tot2;i++)

lastop = top;

for(int j = 1;j <= tot1;j++)

r[ x[j].b ] = e[ id[ x[j].b ] ].w;

for(int j = 1;j <= tot1;j++)

if(x[j].id < y[i].id)

r[ x[j].b ] = x[j].r;

for(int j = 1;j <= tot1;j++)

if(r[ x[j].b ] >= y[i].b)

union(e[ id[ x[j].b ] ].u,e[ id[ x[j].b ] ].v);

ans[ y[i].id ] = sz[ find(y[i].r) ];

while(top > lastop)

}for(int i = 1;i <= tot1;i++)

e[ id[ x[i].b ] ].w = x[i].r;

tot1 = tot2 = 0;

for(int i = 1;i <= m;i++)

std::sort(&e1[1],&e1[tot1 + 1]);

std::merge(&e[1],&e[tot2 + 1],&e1[1],&e1[tot1 + 1],&e2[1]);

for(int i = 1;i <= m;i++)

e[i] = e2[i];

}int main()

if(totq)

solve();

for(int i = 1;i <= q;i++)

if(ans[i])

printf("%d\n",ans[i]);

return 0;

}

洛谷 P5443 橋梁

題意見洛谷。以下認為所有 log 同階,用 log n 表示 首先在我認知範圍內似乎稍微複雜一點的圖上詢問題都沒有polylog做法。先來考慮暴力。先上乙個sb都會的暴力 修改就直接改,查詢就把所有符合條件的邊連起來建出一張圖跑dfs。mathrm o qm 再考慮乙個稍微經過大腦的想法。假如問題是...

洛谷 P3629 APIO2010 巡邏

題目在這裡 這是乙個紫題,當然很難。我們往簡單的想,不建立新的道路時,從1號節點出發,把整棵樹上的每條邊遍歷至少一次,再回到1號節點,會恰好經過每條邊兩次,路線總長度為 2 n 1 根據樹的深度優先遍歷思想,很容易證明這個結論,因為每條邊必然被遞迴一次,回溯一次。建立1條新道路之後,因為新道路必須恰...

洛谷P3621 APIO2007 風鈴

你準備給弟弟 ike 買一件禮物,但是,ike 挑選禮物的方式很特別 他只喜歡那些能被他排成有序形狀的東西。你準備給 ike 買乙個風鈴。風鈴是一種多層的裝飾品,一般掛在天花板上。每個風鈴都包含一些由豎直線連起來的水平杆。每根杆的兩頭都有線連線,下面或者掛著另一根水平杆,或者掛著乙個玩具。下面是乙個...