POJ1043 What's In a Name 逆图+完美匹配

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

题目链接:

poj1043




题意:

一个犯罪团伙有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<s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值