Code Names

题意:

如果一个字符串通过交换两个位置可以得到另一个字符串(也就是两个字符串只有两个位置不一样且为交换关系),我们称这两个字符串为替代关系。
现在给出n个字符串,求一个集合,使得集合内的字符串均不是交换关系,且使得这个集合最大

题解:

现在给每个字符串一个编号
如果两个字符串i和j成替代关系,我们就从i到j连一条线
这样将n个字符串互相连线,我们就得到一个图,接下来该怎么办?
我们知道连线的字符串是不能在一个集合里的
我们将左右侧都为n个字符串,根据关系连线,得到下图(紫色线)

这是个二分图,我们在这个二分图上跑最大二分匹配即可,跑出来的结果m就是不能匹配的数量,最大独立集数就是n − m,
(注意,我们一开始令ans=n*2,让ans减去m,最后除以2是答案)
补充一些关系:
独立集:图中两点不相邻就是图的一个独立集
最大独立集 = n - 最大匹配
最大匹配 = 最小点覆盖
最大独立集 = n - 最小点覆盖
最大团 = 补图的最大独立集
最大独立集 = 补图的最大团

代码:

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int maxn=6e2+9;
string a[maxn];
int ans=0;
bool vis[maxn];
int edge[maxn][maxn];
int fa[maxn];
int n;
bool find(int x){if(vis[x])return 0;vis[x]=1;for(int i=1;i<=n;i++){if(edge[x][i]){if(fa[i]==0||find(fa[i])){fa[i]=x;return 1;}}} return 0;
}
int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}int len=a[1].length();for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){int num=0;for(int k=0;k<len;k++){if(a[i][k]!=a[j][k])num++;}if(num==2)edge[i][j]=1;}}ans=n*2;for(int i=1;i<=n;i++){memset(vis,0,sizeof(vis));ans-=find(i); }cout<<ans/2;
}

Code Names相关推荐

  1. [图论总结] 最大独立集(例题:Code Names)

    [图论总结1] 最大独立集的概念 独立集 匹配 概念之间的关系及性质 例题 最大独立集的概念 独立集 来自oi-wiki 在上面的描述中,V是代表的点集,而E代表的是边集 独立集以及最大独立集均是点的 ...

  2. hdu 5099 Comparison of Android versions 枚举题意

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5099 卡读题,实际上题目中表述的题意并不完整,所以要认真读并且加上一些现实的"常识" ...

  3. 《利用python进行数据分析》读书笔记--第八章 绘图和可视化

    python有许多可视化工具,本书主要讲解matplotlib.matplotlib是用于创建出版质量图表的桌面绘图包(主要是2D方面).matplotlib的目的是为了构建一个MATLAB式的绘图接 ...

  4. jQuery避免$符和其他JS库冲突的方法对比

    jQuery避免$符和其他JS库冲突的方法对比 1.如果jquery库在第三方库之后引用.这个时候jquery库会占用$. 解决办法:剔除$符号的使用权. <script type=" ...

  5. CISC-235 Fall 2018 Assignment

    代写CISC-235作业.代做Python/Java编程作业.代写C/C++课程设计作业.代做HOTNCU留学生作业 CISC-235 Fall 2018 Assignment 2 A certain ...

  6. Android Platform Codenames, Versions, API Levels, and NDK Releases

    The code names match the following version numbers, along with API levels and NDK releases provided ...

  7. php科学计算库,科学计算库numpy基础

    numpy numpy的核心数据结构是ndarray,可以创建N维数组 ndarray的特点 ndarray(N-dimensional array):N维数组 一种由相同类型的元素组成的多维数组,元 ...

  8. Jozky 刷题目录

    文章目录 本目录参考OI-Wiki 还未解决专区 算法基础 枚举 模拟 递归&分治 贪心 排序 前缀和&差分 二分 倍增 构造 搜索 DFS && BFS 双向搜索 启 ...

  9. 安卓源码 代号,标签和内部版本号

    Setup Security Porting Tuning Compatibility Reference 转到源代码 Getting Started Overview Codelines, Bran ...

最新文章

  1. AC日记——中庸之道 codevs 2021
  2. BP神经网络分类2*2对角矩阵准确率数据汇总
  3. Push代码:Git@github.com: Permission denied (publickey)
  4. 微信小程序之scroll-view-导航栏左右滑动
  5. springboot quartz动态任务处理
  6. Linux系统运维之路
  7. 我为什么选择Angular 2?
  8. Ubuntu16.04安装Hadoop+Spark+pyspark大数据python开发环境
  9. php 上传加水印,PHP 图片上传加水印实例
  10. php cli运行获取参数,php cli传递参数的方法
  11. 3Ds MAX 百度网盘免费下载
  12. AWS Lambda重大更新,跨越编程语言差异之门?
  13. android高德地图语音,高德地图导航组件没有导航语音声音
  14. 移动端Touch (触摸)事件
  15. 买入高价显卡的回血方法
  16. 几个IDS开源系统介绍
  17. 新手小白适合做哪个跨境电商平台?测评自养号能带来哪些收益及优势?
  18. 尼尔机械纪元游乐园怎么去机器人村_尼尔机械纪元图文攻略 系统教程+全任务剧情流程...
  19. android xml绘图p113-p117
  20. 我最喜欢的一位女明星哦!

热门文章

  1. 程序员没有女朋友的原因,我终于找到了!
  2. 当代大学查寝奇葩操作大赏 | 今日最佳
  3. 2018年,该转行AI工程师吗?
  4. 与ln的指数转化公式_高考数学48条秒杀型公式与方法
  5. oracle绑定变量过多,oracle - 在SQL Plus中使用绑定变量并返回多行? - 堆栈内存溢出...
  6. 通达信版弘历软件指标_通达信软件指标编写基础教程,10个指标源码祝你股市一帆风顺...
  7. php mysql explain_MySQL Explain详解
  8. python中闭包不是立刻执行_一道神奇的Python面试题,你会吗?
  9. 数据结构——图-迪杰斯特拉算法
  10. mysql innodb log_教你如何理解mysql中的innoDB log