POJ PKU 2724 图论 二分匹配
(2010-07-21 20:33:52)
标签:
pojpku2724it |
分类: 图论 |
题目描述:
给你n个长度为m的0,1串。
(串中如果有*,那么*既表示0,又表示1。如 *01 表示 001 和 101.)
那么,去掉重复的串,我就得到了一个无重复的0,1串的集合。
现在要把这些串都删除掉,删除的方法是(2种):
1:一次删除任意指定的一个。
2:如果有两个串仅有一个字符不同,则可以同时删除这两个。
问你,最少要多少次可以删除完。
解题报告:
由题意,可以用匹配的思想。
如果两个串之间只有一个字符不同,那么这两个串之间连接一条边。
最大的匹配数就是节省的次数。
但是乍一看上去是图匹配。但是实际上是二分匹配。
应为每个串中的1为奇数的串之间是不能匹配的(不可能只有1个不同)。
同理,偶数也是。
所以,可以按照1的奇偶性把数据分成2份,然后用2分匹配即可。
代码如下:
#include<iostream>
using namespace std;
#define size 1024
int n, m, a, b, cnt[2], g[size][size], x[2][size],
match[size];
bool vst[size];
char str[13];
void judge()
{
}
bool jeo(int id1, int id2)
{
}
int find(int u)
{