XSY2741 網格 分治 LCT 並查集

2022-03-25 17:38:30 字數 2558 閱讀 6766

有乙個\(n\times m\)的網格,線框的交點可以扭動,邊不可伸縮。網格中有一些格仔裡面放了'x'形的支架,這些格仔不會變形,但可以整體轉動。如果所有格仔都不能變形,那麼稱這個網格穩固。

有\(q\)個操作,每次改變乙個格仔的狀態,即有支架給為無支架,無支架改為有支架。

請你判斷初始及每次操作後這個網格是否穩固。

比如說下面這個網格就不穩固。

先看看怎麼判斷乙個網格是否穩固。

先給整個網格的左邊和上邊加上一行一列,然後把第一行的最左邊兩個格仔設為有支架的格仔,其他的設為沒支架的格仔。

樣例那個圖就會變成這樣

可以發現這樣操作是不會改變整個圖形的穩定性的。

設格仔\((i,j)\)右下角的角度為\(a_+90\)。

因為乙個交點四個角的度數和為\(360\),所以可以列出以下方程:

\[\begin

90+a_+180-90-a_+180-90-a_+90+a_&=360\\

a_+a_-a_-a_&=0

\end

\]然後通過一些簡單變換可以得到

\[a_+a_-a_-a_=0

\]因為\(a_=0\),所以方程簡化為

\[a_=a_+a_

\]當\((i,j)\)有支架時\(a_+a_=a_=0\),即\(a_=-a_\),那麼我們就在圖\(g\)的\(i\)和\(j+n\)兩個點之間連一條邊。

顯然這個圖是二分圖。

因為邊界上只有\(a_=0\),所以乙個點只有和\(n+1\)號點\((0,1)\)屬於同乙個聯通塊,這個點對應的角的角度才是確定的。

當\((i,j)\)無支架時\(a_=a_+a_\)。如果\(a_\)和\(a_\)之間有乙個沒有確定,那麼\(a_\)也沒有確定。

所以說,這個網格是穩定的\(\longleftrightarrow\)圖\(g\)只有乙個聯通塊。

現在問題就變成了:有乙個\(n+m\)個點的圖,有\(nm\)條邊,還有\(q\)個加邊刪邊的操作。問操作前和每一次操作完後聯通塊個數是不是\(1\)。

用分治+並查集和lct都可以做。

可以把一定存在的邊先用路徑壓縮的並查集處理完。

分治+並查集:\(o(nm\alpha+q\log^2(n+m))\)

lct:\(o(nm\alpha+q\log (n+m))\)

#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

typedef pairpii;

void open(const char *s)

vectora[400010];

int f[10010];

int r[10010];

int ans[100010];

int s1[10010];//x

int s2[10010];//f[x]

int s3[10010];//r[f[x]]

int top;

int n,m,q;

char s[10010];

int c[3010][3010];

int find(int x)

int find2(int x)

int num=0;

int merge(int x,int y)

int merge2(int x,int y)

void back()

void add(int p,int l,int r,int x,int y,int l,int r)

int mid=(l+r)>>1;

if(l<=mid)

add(p<<1,l,r,x,y,l,mid);

if(r>mid)

add((p<<1)|1,l,r,x,y,mid+1,r);

}void solve(int l,int r,int p)

while(top>now) }

int main()

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

int x,y;

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

else

c[x][y]=i;

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

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

if(~c[i][j])

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

find2(i);

solve(0,q,1);

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

if(ans[i])

printf("s\n");

else

printf("u\n");

return 0;

}

960網格系統

可以幫助我們在ps中快速布局 12欄,16欄,24欄 我們也可以利用css樣式表模板快速寫網頁 兩欄布局網頁部分 id class container 12 class grid 12 工具欄div div div class container 12 id header class grid 2 ...

1 網格系統

第乙個例子 建立一行 然後,新增是需要的列 col 類中設定 第乙個星號 表示響應的裝置 sm,md,lg 或 xl,第二個星號 表示乙個數字,同一行的數字相加為 12。第二個例子 不在每個col上新增數字,讓 bootstrap 自動處理布局,同一行的每個列寬度相等 兩個 col 每個就為 50 ...

2 網格模型

1.建立幾何模型 var geometry new three.spheregeometry 60,40,40 建立乙個球體幾何物件 var geometry new three.boxgeometry 100,100,100 建立乙個立方體幾何物件geometry 2.建立材質 var mater...