题目链接:
题意:
一个犯罪团伙有N个人,他们分别有一个名字和一个网名
现已知他们会先后进出一个房间发送电报
警方可以知道所有时间下:
进出房间的人的真实名字
同时通过截获该房间发出的电报,获得网名
问最后能否将所有真实名字和虚拟网名对上
解题思路:
首先根据题目条件名字和网名是一一对应的,可以大概确定是二分匹配中的完美匹配
然而根据样例很容易看出来,要想根据正确关系来建边是很复杂的
容易的做法是:每次将不可能匹配的名字和网名建边,最后根据补图进行最大匹配即可初步得出所有匹配关系.
但现在得到的最大匹配不一定是完美匹配
要确定某个名字和网名是匹配的 我们可以删除当前已匹配的边,再进行最大匹配
如果结果减小了,则一定是对应的
这样,依次枚举每一条最大匹配中的边.即可得出答案
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define maxn 25
using namespace std;
struct node
{
string a,b;
} s[maxn];
map<string,int>m1,m2;
string s1[m

博客详细解析了POJ1043题目的思路,这是一个关于犯罪团伙成员名字与网名对应关系的问题。通过构建逆图和使用最大匹配算法,来确定名字与网名的一一对应关系。文章指出,通过不断删除已匹配的边并重新进行最大匹配,可以判断出最终的完美匹配情况。

2266

被折叠的 条评论
为什么被折叠?



