/*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 #include3char 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...