一些二分匹配的題

2022-03-11 07:16:05 字數 4164 閱讀 5360

/*

poj1469簡單的二分匹配

*/#include

#include

int map[1005][1005],vis[2000],match[2000

];int

n,m;

int dfs(int

u) }

}return0;

}int

main()

}int ans=0

; memset(match,-1,sizeof

(match));

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

if(ans==m)

printf(

"yes\n");

else printf("

no\n");

}}/*

*poj2446

*//*

第一次交陣列開小了 ,改好就a了,哈哈,開心

*/#include

#include

int map[50][50],g[1205][1205],n,m,k,sum,vis[3000],match[3000

];void

makemap()

}}int dfs(int

u) }

}return0;

}int

main()

makemap();

int ans=0

; memset(match,-1,sizeof

(match));

for(i=1;i)

}if(ans+k==(n*m))

printf(

"yes\n");

else printf("

no\n");

}}

//

最大獨立集

//hdu1068

#include#include

struct

node

edge[

2000

];int head[2000],n,vis[2000],match[2000

];int

index;

void add(int xx,int

yy)int dfs(int

u) }

}return0;

}int

main()

}int ans=0

;

for(i=0;i)

if(ans%2)ans+=1

; printf(

"%d\n

",n-ans/2);//

最大獨立集=頂點總數-二分圖最大匹配}}

/*最小頂點覆蓋 == 最大匹配(雙向圖)/2;

hdu1054

要雙向圖

*/#include

#include

struct

node

edge[

20000

];int vis[2000],head[2000],match[2000

];int

n,m,index;

void add(int x,int

y)int dfs(int

u) }

}return0;

}int

main()

}int ans=0

;

for(i=0;i)

}printf(

"%d\n

",ans/2

); }

}

hdu2119

建圖發現同一行和同一列能夠消除;

然後可以發現就是從這一點出發,同一行,同一列有1的點就能夠連線起來;

然後就是一張2分圖;00

0101

010二分圖 :

2->1,2->3,3->2;/*

*hdu2119*

*///

建圖的重要性,把行和列作為圖來寫

#include

#include

int map[200][200

];int

n,m;

int vis[10005],match[10005

],index;

int dfs(int

u) }

}return0;

}int

main()

int ans=0

;

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

printf(

"%d\n

",ans);

}}

1

//hdu5090 二分匹配

2 #include3 #include

4int match[103],vis[103];5

int map[103][103];6

intn,k;

7int dfs(intu)8

20}21}

22return0;

23}24int

main()

2544}45

int ans=0;46

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

4752

if(ans==n)

53 printf("

jerry\n");

54else printf("

tom\n");

55}56 }

最感人的二分匹配題 不會建圖。。

zoj  place the robots

1 #include2 #include

3char map[52][52];4

int g[2600][2600],n,m,match[2600];5

int x[52][52],y[52][52];6

intxx,yy;

7bool vis[2600];8

bool dfs(intu)9

21}22}

23return

false;24

}25intmain()

2651

else

if(map[i][j]=='#'

)5255}

56}57 xx=num;num=0;58

//豎直方向

59for(i=0;i)

6071

else

if(map[j][i]=='#'

)72 flag=0;73

}74}75 yy=num;

76//

建新圖77

for(i=0;i)

78for(j=0;j)

7984}85

8687

for(i=0;i)

8893 printf("\n"

);94}95

for(i=0;i)

96101 printf("\n"

);102

}103

104105

//二分匹配

106 memset(match,-1,sizeof

(match));

107int ans=0

;108

for(i=1;i<=xx;i++)

109114

115 printf("

case :%d\n

",++ff);

116 printf("

%d\n

",ans);

117}

118}

119120

/*121

1222

1235 5

124o***#

125*###*

126oo#oo

127***#o

128#o**o

1294 4

130o***

131*###

132oo#o

133***o

134135

*/

二分 二分匹配

給了乙個矩陣 n行m列 選n個數 要保證這n個數不在同行同列,計算出第k大的數最小 二分答案,然後我們對於每個a i j mid的我們就i和j建立一條邊 然後二分求最大匹配必須大於等於n k 1 因為是第k大 而不是第k小 坑了好久才發現 include include include includ...

二分匹配演算法

匈牙利演算法求二分匹配 下 include includeusing namespace std int v 頂點數 vectorg max v 圖的鄰接表表示 int match max v 所匹配的頂點 bool used max v dfs 中用到的訪問標記 向圖中增加一條連線 u 和 v 的...

過山車 (二分匹配)

rpg girls今天和大家一起去遊樂場玩,終於可以坐上夢寐以求的過山車了。可是,過山車的每一排只有兩個座位,而且還有條不成文的規矩,就是每個女生必須找個個男生做partner和她同坐。但是,每個女孩都有各自的想法,舉個例子把,rabbit只願意和xhd或pqk做partner,grass只願意和l...