有乙個\(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...