邊分治建圖模板

邊分治最怕菊花圖
所以要對原圖進行改造

https://blog.csdn.net/make_it_for_good/article/details/52194466

需要用vector存儲鄰接表
方法妙不可言
0邊是虛邊,1邊是實邊

	for(int x=1;x<=n;x++) {   
        int t=a[x].size();
        if(t==0)continue;
        if(t==1) {
            add(x,a[x][0],1);add(a[x][0],x,1);
            continue;
        }
        for(int i=2;i<t<<1;i<<=1)
            for(int j=0;j<t;j+=i) {
                add(++n,a[x][j],i==2 ? 1:0);
                add(a[x][j],n,i==2 ? 1:0);
                a[x][j]=n;v[n]=v[x];
                if(j+(i>>1)<t) {   
                    add(n,a[x][j+(i>>1)],i==2 ? 1:0);
                    add(a[x][j+(i>>1)],n,i==2 ? 1:0);
                }
            }
        add(n,x,0);add(x,n,0);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章