省選時孫耀峰大爺講過傳遞閉包相關問題,沒想到竟然遇上了。
傳送門這題其實可以用孫耀峰大爺**中「不完全動態傳遞閉包」,但利用題目中的一些性質會更好。
我一開始的想法是,先將原圖scc縮點,對於每乙個操作時刻結束後,整個圖一定是dag套樹,用靜態傳遞閉包+動態樹相關理論即可。因為只有加點,所以可以倍增。
但我們注意到,對於乙個詢問,如果當前答案為假,那麼之後答案也不會為真,因為只有加點,對於原有的點之間並不會加邊,所以原先的連通性不會變。利用這個性質,我們只要把所以操作結束後的圖做下靜態傳遞閉包就好了。
#include
#include
#include
#include
using
namespace
std;
inline
int getint()
const
int n=50010,m=150010;
struct graphe[m];
void init(int n)
void addedge(int a,int b);
h[a]=xb;
}};struct dag:graph
}void work()
inline
bool is_anc(int u,int v)
}g1;
struct scc_graph:graph
void tarjan()
void rebuild(dag&g)
}g;
int n,m,q,i,u,v,q1[m],q2[m],t,x,y;
int main()
q=getint();
for(i=1;i<=q;++i)else q1[++x]=u,q2[x]=v;
}g.n=y;
g.tarjan();
g1.init(g.scc_cnt);
g.rebuild(g1);
g1.work();
for(i=1;i<=x;++i)
if(g1.is_anc(g.sccno[q1[i]],g.sccno[q2[i]]))puts("yes");
else
puts("no");
return
0;}
JS中一道關於this和閉包的題
var num 20 var obj num var fn obj.fn fn obj.fn console.log window.num,obj.num 65 85 240,120 obj.fn 執行 執行this.num 3 將全域性下的num改為 60 執行 num 15,將私有作用域下的nu...
傳遞閉包經典題
傳遞閉包 給了 a 與 b 的關係,又給了 b 與 c 的關係,我們可以推測出 a 與 c 的關係,這個過程就是傳遞閉包。過程for k,1 n for i,1 n for j,1 n 傳遞閉包經常與 typo 一起使用,在傳遞閉包求出先後 比較 優先順序關係之後用 typo sort 求出這個順序...
一道演算法題
兩個燒杯,乙個放糖乙個放鹽,用勺子舀一勺糖到鹽,攪拌均勻,然後舀一勺混合 物會放糖的燒杯,問你兩個燒杯哪個雜質多?一樣多吧 對的 為啥?是不是因為 糖和鹽本來就是均勻的 因為,就算不攪拌均,你放一勺過去,那邊放一勺不含雜質的過來,那麼都是一勺雜之 如果攪拌均勻的話也是一樣 小依 21 45 32 也...