codevs 1027 姓名与ID
/*
二分图匹配 建图稍麻烦点
不过 有STL大法带我上天
说正经的 先假设都有关系 然后把确定的没有关系的删掉
这样跑出来的一定是完美匹配
至于确定的匹配嘛 删掉这一条 不再是完美匹配
然后记下排序输出
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define maxn 25
using namespace std;
int n,sum,k,g[maxn][maxn],ans,match[maxn],use[maxn];
bool vis[maxn];
string s,q[maxn],id[maxn];
char si;
map<string,int>p,f,us;
struct node
{
int name,ID;
}a[maxn];
int cmp(node x,node y)
{
return q[x.name]<q[y.name];
}
bool Dfs(int s)
{
for(int i=;i<=n;i++)
if(vis[i]==&&g[s][i])
{
vis[i]=;
if(match[i]==||Dfs(match[i]))
{
match[i]=s;
return ;
}
}
return ;
}
int main()
{
cin>>n;
for(int i=;i<=n;i++)
{
cin>>s;p[s]=i;id[i]=s;
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
g[i][j]=;
while()
{
cin>>si;
if(si=='Q')break;
cin>>s;
if(si=='E')
{
if(us[s]==)q[++k]=s;
f[s]=;us[s]=;
}
if(si=='L')f[s]=;
if(si=='M')
{
for(int i=;i<=n;i++)
if(f[q[i]]==)
g[i][p[s]]=;
}
}
for(int i=;i<=n;i++)
{
memset(vis,,sizeof(vis));
ans+=Dfs(i);
}
int Tar=ans;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(!g[i][j])continue;
g[i][j]=;ans=;
memset(match,,sizeof(match));
for(int o=;o<=n;o++)
{
memset(vis,,sizeof(vis));
ans+=Dfs(o);
}
if(ans<Tar)
{
a[++sum].name=i;
a[sum].ID=j;
use[i]=;
}
g[i][j]=;
}
for(int i=;i<=n;i++)
if(use[i]==)a[++sum].name=i;
sort(a+,a++sum,cmp);
for(int i=;i<=sum;i++)
if(use[a[i].name])cout<<q[a[i].name]<<":"<<id[a[i].ID]<<endl;
else cout<<q[a[i].name]<<":???"<<endl;
return ;
}
codevs 1027 姓名与ID的更多相关文章
- 1027 姓名与ID[二分图匹配(匈牙利)]
1027 姓名与ID 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 有N个人,各自有一 ...
- 姓名与ID(codevs 1027 未结题)
题目描述 Description 有N个人,各自有一个姓名和ID(别名).每个人的姓名和ID都没有重复.这些人依次进入一间房间,然后可能会离开.过程中可以得到一些信息,告知在房间里的某个人的ID.你的 ...
- [codevs1027]姓名与ID
[codevs1027]姓名与ID 试题描述 有N个人,各自有一个姓名和ID(别名).每个人的姓名和ID都没有重复.这些人依次进入一间房间,然后可能会离开.过程中可以得到一些信息,告知在房间里的某个人 ...
- Java连接excel实现:通过姓名查找id和通过id查找姓名
注意每个方法结束都要关闭workbook: 还有getIdbyname()方法中字符串flag与name的比较,一定要用equals()方法!!!: 剩下的不多解释,注释都在代码中: import j ...
- 表id关联数据获取至页面,制作下拉框多选进行数据多项获取(字段处理)
这周完成了一张表单,重点碰到以下问题: 1.freemaker获取年份的type值取year,类型直接为Long,传至后台和获取数据不需要转换: 2.freemaker获取日期type值为date, ...
- 《转载》PAT 习题
博客出处:http://blog.csdn.net/zhoufenqin/article/details/50497791 题目出处:https://www.patest.cn/contests/pa ...
- 编写高质量代码:改善Java程序的151个建议(第3章:类、对象及方法___建议47~51)
建议47:在equals中使用getClass进行类型判断 本节我们继续讨论覆写equals的问题,这次我们编写一个员工Employee类继承Person类,这很正常,员工也是人嘛,而且在JavaBe ...
- ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现
在简单了解了Unobtrusive JavaScript形式的验证在jQuery中的编程方式之后,我们来介绍ASP.NET MVC是如何利用它实现客户端验证的.服务端验证最终实现在相应的ModelVa ...
- 完整mybatis应用
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-/ ...
随机推荐
- 绘图时,根据size()和自定义rect编程的区别
在绘图的时候,很多时候编写的代码需要根据当前窗口自身的size来进行绘制,这个时候可以添加一个额外的中间rect来做过度,这样以后的绘图机制不会 随着size的变化而不断变化.你的处理逻辑可以保持不变 ...
- Xshell下漂亮的开发环境配置
今天折腾了一天Xshell配置Linux命令行开发环境. 总结几点: 1.Xshell配色方案,这是我自己调的个人使用版,网上比较好的版本有Solarized Dark,可以下载到. [ColorFo ...
- Spring+SpringMVC+Mybatis+MAVEN+Eclipse+项目完整环境搭建
1.新建一个Maven项目,创建父项目. 2.创建子项目模块 3.创建javaWeb项目 4.创建后的项目目录结构 5.Maven文件配置 parent父项目pom.xml文件配置 <?xml ...
- CSS样式margin:0 auto不居中
<style type="text/css">html,body{height:100%;width:960px;}.container{background-colo ...
- python运维开发之第九天
一.paramiko模块 1.简介 大家会发现,常见的解决方法都会需要对远程服务器必要的配置,如果远程服务器只有一两台还好说,如果有N台,还需要逐台进行配置,或者需要使用代码进行以上操作时,上面的办法 ...
- LINUX搭建SVN客户端和多个项目的权限分组管理
搭建SVN服务,有效的管理代码,以下三步可以快速搞定.1.安装 #yum install subversion 判断是否安装成功 1 #subversion -v svnserve, version ...
- UML问题
1.在创建协作图时需要先确定参与者,而协作图的工具栏里是没有Actor的,这是需要先new Actor,然后把其拖动到工作区:实验过程中发现必须创建在用例视图下,若是创建在逻辑试图下那么根本无法继续操 ...
- CLOUDSTACK HA功能,测试成功
要注意VM HA和HOST HA两个级别的区别.并且要整合.
- HDU 3446 daizhenyang's chess
http://acm.hdu.edu.cn/showproblem.php?pid=3446 题意:一个棋盘,有个KING,有一些能走的点,每次只能走到没走过的地方,没路可走的输,求先手是否必胜. 思 ...
- C51指针类型和存储区的关系详解
一.存储类型与存储区关系 data ---> 可寻址片内ram bdata ---> 可位寻址的片内ram idata ---> 可寻址片内ram ...