51nod1743 雪之國度

2021-07-24 16:21:49 字數 2159 閱讀 1771

對於乙個無向圖,邊有邊權。對於每組詢問u、v,如果可以找到兩條從u到v不相交的路徑,輸出路徑上邊權最大值的最小值。

我們考慮到,如果按照邊權從小到大加邊,第一次使得u和v處在同乙個邊雙聯通分量時我就求得了答案。

考慮乙個很強的方法,用lct或啟發式合併維護森林,動態維護雙連通分量。

因為不可能去持久化+二分求詢問,我們可以再思考,每次將兩個邊雙合併意味著一次集合合併,我們建乙個新點,讓原先邊雙對應點連向該新點,邊權即為當前列舉邊的邊權。

只要做完一次過程,可以發現如果u到v有答案,必定是求u到v在新樹(易證建出的新圖是樹)上樹路徑邊權的最大值,這是個經典套路。

維護森林是很麻煩的,但是注意到u和v聯通才能有答案。

何不先做一次最小生成樹(最小生成樹也是按邊權從小到大插入的!),再依次加入非樹邊。

這樣的好處是,我們有了一顆靜態樹,不需要再用高階方法維護森林了!

現在我們只需要並查集和倍增就夠了。

#include

#include

#include

#define fo(i,a,b) for(i=a;i<=b;i++)

using namespace std;

const int maxn=100000+10,maxm=500000+10;

struct dong a[maxm];

int fa[maxn+maxm],f2[maxn],w[maxn],d[maxn+maxm],zjy[maxn+maxm],f[maxn+maxm][25],g[maxn+maxm][25];

int h[maxn+maxm],from[maxm*2],go[maxm*2],nxt[maxm*2],dis[maxm*2];

bool pd[maxm];

int i,j,k,l,r,s,t,n,m,q,tot,top,root;

intread()

while (ch>='0'&&ch<='9')

return

x*f;

}bool cmp(dong a,dong b)

int getfa2(int

x)void add(int

x,int

y,int z)

void dfs(int

x,int

y) t=nxt[t];

}}void dg(intx)}

int lca(int

x,int

y) }

if (x==y) return

x; int j=zjy[d[x]];

while (j>=0)

j--;

}return f[x][0];

}int getmx(int u,int v)

j--;

}j=zjy[d[v]];

while (j>=0)

j--;

}return t;

}int main()

sort(a+1,a+m+1,cmp);

fo(i,1,m)

}dfs(1,0);

fo(i,1,n+m) zjy[i]=floor(log(n)/log(2));

fo(j,1,zjy[n])

fo(i,1,n)

fo(i,1,n) fa[i]=f2[i]=0;

top=n;

tot=0;

fo(i,1,n) h[i]=0;

fo(i,1,m)

if (!pd[i])

t=k;

while (d[t]>=d[r])

add(top,getfa(r),max(l,a[i].z));

fa[getfa(r)]=top;

t=j;

while (d[t]>=d[r])

t=k;

while (d[t]>=d[r])

}fo(i,1,top) d[i]=0;

fo(i,1,tot)

f[go[i]][0]=from[i],g[go[i]][0]=dis[i],d[go[i]]++;

fo(j,1,zjy[top])

fo(i,1,top)

fo(i,1,top)

if (!d[i]) dg(i);

fo(i,1,q)

}

51NOD1743 JZOJ4899 雪之國度

給定 n 個點,m條邊的無向圖。每個點有點權wi 一條邊 x y 的邊權定義為 w x wy 有q 詢問,每次詢問兩個點 x y 如果 x 和 y之間存在至少兩條互不相交 沒有重複邊 的路徑,那麼輸出這兩條路徑上邊權的最大值 如果有多對路徑,選擇最小的 否則輸出 1 3 n 105,3 m 5 10...

51nod 貪心入門

有若干個活動,第i個開始時間和結束時間是 si,fi 活動之間不能交疊,要把活動都安排完,至少需要幾個教室?分析 能否按照之一問題的解法,每個教室安排盡可能多的活動,即按結束時間排序,再貪心選擇不衝突的活動,安排乙個教室之後,剩餘的活動再分配乙個教室,繼續貪心選擇 反例 a 1,2 b 1,4 c ...

51nod 迷宮問題

1459 迷宮遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的...