題目大意:
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的關鍵站點。顯然,對於給定的兩個站點,關於它們的關鍵點的...