二分图
判定
染色法
bool dfs(int x, int color) { v[x] = color; for (unsigned int i = 0; i < e[x].size(); i++) { int y = e[x][i].first; if (v[y]) { if (v[y] == color) return 0; } else { if (!dfs(y, 3 - color)) return 0; } } return 1; }
匹配
1要素
一个节点一定有链接一条匹配变
0要素
同一集合内无边相连
最大匹配+匈牙利
bool dfs(int x) { for(int y=1;y<=m;y++) { if(flag[x][y]||vis[y]) continue; vis[y]=1; if(!fri[y]||dfs(fri[y])) { fri[y]=x; return 1; } } return 0; } int main(){ for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; } }
细雨斜风作晓寒,
淡烟疏柳媚晴滩。
入淮清洛渐漫漫。
雪沫乳花浮午盏,
蓼茸蒿笋试春盘。
人间有味是清欢。