寬搜 並查集 Vijos P1015 十字繡

2021-07-16 19:07:49 字數 2436 閱讀 7758

題目大意

n*m的網格,線只能在網格的頂點處才能從布的一面穿到另一面。每一段線都覆蓋乙個單位網格的兩條對角線之一,而在繡的過程中,一針中連續的兩段線必須分處布的兩面。

給出布兩面的圖案,問最少需要幾針才能繡出來?一針是指標不離開布的一次繡花過程。

題目思路:

【寬搜】或【並查集】

正面的如果有線就把端點連正邊,反面連負邊。

一針就是從正邊到反邊再到正邊這樣迴圈下去。用寬搜寫floodfill(或者並查集)把一次走到線路摳出來,線路上|正邊數-反邊數|/2為該線路的針數。

感覺自己說不太清楚,引用大牛zhymaoiing的話:

將正面的邊視為正邊,反面的則視為負邊。用floodfill將由正邊和負邊交替連線的結點組成乙個塊。對於每乙個塊,其中的所有結點的正邊數目和負邊數目之差的絕對值(定為dep)之後div 2後就為這個塊的所需針數。

在乙個塊中只用一針就可完成,假設該針由v1出發,到vn結束,那麼v1到vn中間的點的dep為0,而v1和vn則為1。也就是說塊中的那一針在v1有乙個入口,在vn有乙個出口,而每一對入口和出口就代表了一針,那麼就可以通過dep之和除以2得到所需針數。由此可以拓寬到多針。

bfs

//

//by cool***

//#include#include#include#include#include#include#include#include#include#include#include#define min(a,b) ((a)<(b)?(a):(b))

#define max(a,b) ((a)>(b)?(a):(b))

#define abs(a) ((a)>0?(a):(-(a)))

#define lowbit(a) (a&(-a))

#define sqr(a) ((a)*(a))

#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))

#define eps 1e-8

#define j 10

#define max 0x7f7f7f7f

#define pi 3.1415926535897

#define n 207

using namespace std;

int n,m,lll,ans,cas;

char map[2][n][n];

bool u[n][n];

bool f;

void floodfill(int i,int j)

} }if(i>1 && j<=m)

}} if(i<=n && j>1)

}} if(i<=n && j<=m)

}} lll+=abs(t);

}int main()

} printf("%d\n",ans);

} return 0;}/*

////

*/

並查集

//

//by cool***

//#include#include#include#include#include#include#include#include#include#include#include#define min(a,b) ((a)<(b)?(a):(b))

#define max(a,b) ((a)>(b)?(a):(b))

#define abs(a) ((a)>0?(a):(-(a)))

#define lowbit(a) (a&(-a))

#define sqr(a) ((a)*(a))

#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))

#define eps 1e-8

#define j 10

#define max 0x7f7f7f7f

#define pi 3.1415926535897

#define n 207

using namespace std;

int n,m,lll,ans,cas,cass;

int a[n*n],b[n*n],fa[n*n],c[n*n];

bool u[n*n],v[n*n];

char map[2][n][n];

int zhao(int aa)

int main()

if(map[k][i][j]=='/' || map[k][i][j]=='x')}}

} for(i=0;i<(n+1)*(m+1);i++)

for(i=1;i<=c[0];i++)

printf("%d\n",ans);

} return 0;}/*

////

*/

並查集亂搞 bzoj1015

建圖建錯4次 改了2個鐘。這本是道水題。1 program hehe 2type 3 edge record 4q,z,next longint 5end 6 var7 n,m,q,i,j,k,cnt longint 8 p,pd array 0.500000 of boolean 9 e arra...

BZOJ 1015 並查集 連通塊

很久以前,在乙個遙遠的星系,乙個黑暗的帝國靠著它的超級 統治者整個星系。某一天,憑著乙個偶然的 機遇,一支反抗軍摧毀了帝國的超級 並攻下了星系中幾乎所有的星球。這些星球通過特殊的以太隧道互相直 接或間接地連線。但好景不長,很快帝國又重新造出了他的超級 憑藉這超級 的力量,帝國開始有計畫 地摧毀反抗軍...

風險度量 廣搜,並查集)

x星系的的防衛體系包含 n 個空間站。這 n 個空間站間有 m 條通訊鏈路,構成通訊網。兩個空間站間可能直接通訊,也可能通過其它空間站中轉。對於兩個站點x和y x y 如果能找到乙個站點z,使得 當z被破壞後,x和y無法通訊,則稱z為關於x,y的關鍵站點。顯然,對於給定的兩個站點,關於它們的關鍵點的...