D - Swap Free Gym - 102423D 二分图性质:补图最大团 = 点的个数 - 最大匹配数
题意:给你一个串的某些全排列,没有重的,让你求一个最大的集合能有多少个元素,集合的满足条件:交换一个串的任意两个位置上的字母,不能变成集合里的另一个串。
思路:如果一个串不能通过交换一次字母位置变成另一个串,就让这两个串建边。建好图之后,找一个最大完全图,表示任意两个都不能通过交换变成相同的串。但是提交后发现找最大团的算法会TLE,就要用到题目的性质了。补图最大团 = 点的个数 - 最大匹配数,这样我们就让能交换到达的建边。
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int maxn = 505;
vector<int> ma[maxn];
char MAP[550][30];
int link[maxn];
bool vis[maxn]; bool dfs(int x){
int len = ma[x].size() - 1;
for(int i = 0; i <= len; i++){
int v = ma[x][i];
if(vis[v]) continue;
vis[v] = 1;
if(!link[v] || dfs(link[v])){
link[v] = x;
link[x] = v;
return 1;
}
}
return 0;
} int solve(int n){
int ans = 0;
for(int i = 1; i <= n; i++){
if(link[i]) continue;
for(int j = 1; j <= n; j++) vis[j] = 0;
if(dfs(i)) ans++;
}
return n - ans;
} int main(){
int n;
scanf("%d",&n); getchar();
for(int i = 1;i <= n;i++){
gets(MAP[i]);
}
int len = strlen(MAP[1]);
for(register int i = 1;i <= n;i++){
for(register int j = i + 1;j <= n;j++){
int sum = 0;
for(register int k = 0;k < len;k++){
if(MAP[i][k] != MAP[j][k]){
sum++;
if(sum > 2) break;
}
}
if(sum == 2) {
ma[i].pb(j);
ma[j].pb(i);
}
}
}
printf("%d\n",solve(n));
return 0;
}
D - Swap Free Gym - 102423D 二分图性质:补图最大团 = 点的个数 - 最大匹配数的更多相关文章
- poj 3041 Asteroids(二分图 *【矩阵实现】【最小点覆盖==最大匹配数】)
Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16379 Accepted: 8930 Descri ...
- BZOJ - 2744 朋友圈 (二分图上的最大团)
[题目大意] 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大数目.两 ...
- poj3041-Asteroids , 二分图的最小顶点覆盖数 = 最大匹配数
点击打开链接 Konig定理:二分图的最小顶点覆盖数 = 二分图的最大匹配数 题意: 在N*N的网络中有K颗小行星.小行星i的位置是(Ri, Ci).如今有一个强力的武器可以用一发光束将一整行或一整列 ...
- (hdu)2444 The Accomodation of Students 判断二分图+最大匹配数
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Problem Description There are a group of s ...
- UVALive 2523 Machine Schedule(二分图求最大匹配数)
题意:有两台机器,上面有多个工作区域,有多个任务,分别可以在两台机器的某一个区域上完成,两台机器一开始都在0区域上工作,每次更改区域,都会重新启动一次,让我们求出最小的重启次数. 思路:将两个区域连线 ...
- 二分图匹配 最大匹配数+最大点覆盖 POJ 1469+POJ 3041
最大匹配数就等于最大点覆盖,因为在图里面,凡是要覆盖的点必定是连通的,而最大匹配之后,若还有点没有覆盖到,则必定有新的匹配,与最大匹配数矛盾,如果去掉一些匹配,则必定有点没有覆盖到. POJ 1469 ...
- POJ2942 Knights of the Round Table[点双连通分量|二分图染色|补图]
Knights of the Round Table Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 12439 Acce ...
- POJ1112 Team Them Up![二分图染色 补图 01背包]
Team Them Up! Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7608 Accepted: 2041 S ...
- E - Swap - hdu 2819(简单二分图匹配)
题意:如果可以交换行列,问主对角线能不能全为1 分析:要想主对角线全为1很明显要有N个行列不想同的点就行了,可以用二分图匹配计算出来多能有几个.如果小与N就不能.输出要是对的就行,不必和答案一样 ** ...
- [hdu5313]二分图性质,dp
题意:给定二分图,求添加的最多边数,使得添加之后还是二分图 思路:如果原图可以分成X,Y两个点集,那么边数最多为|X||Y|条.由于|X|+|Y|==n,所以需要使|X|与|Y|尽量接近.先对原图进行 ...
随机推荐
- 突然连不上虚拟机,本地网络里没有VMnet8
今天打开虚拟机,突然发现无法ping通网络了,但是能ping通虚拟机ip,打开我的window的网络适配器发现居然没有vmnet 8虚拟网卡了,防火墙什么的都设置好了,仍然不行,后来发现,在网络和共享 ...
- 【python】界面学习
最近开始要用python做界面了,又是在百度的洪流中不断呛水.下面列举了很多我在过程中查询的内容以及我认为相对对我的认知有益的链接. 1.python有哪些做界面的工具 三个:python gui 中 ...
- C#访问MySQL(二):数据插入与修改(增改)
前言: 前面说了数据库的连接查询,现在说数据库的增删改.这里引入一个数据库的实体类,就是将当前数据库的某一个表里面所有字段写成实体类,如下: 1.数据库的实体类: 需要项目里下载Chloe.dll和C ...
- C# byte[]与string的相互转换
byte[]转string: string str = System.Text.Encoding.Default.GetString( byteArray ); string转byte[]: byte ...
- C# 数据结构和算法-数组队列
队列: 队列是一个有序列表,遵循先入先出原则,可以用数组或链表实现 使用场景 用于排队,按顺序执行 public static void Main(string[] args) { ArrayQueu ...
- Centos7部署PXE+Kickstart 实现批量安装操作系统
1.PXE环境概述 作为一名运维人员,在一些中小公司经常会遇到一些机械式的重复工作,比如:批量一次大批量的进行操作系统的安装等等.为了实现自动化运维,减少人员负担我们可以部署以下服务:Kickstar ...
- 20220719 第七组 陈美娜 Java(this,封装,构造器概念)
1.关于构造器 如果说创建对象仅仅是为了调用这个类的方法,建议使用无参构造器 如果说创建对象的时候需要使用到对象的某个属性,可以使用构造器赋值 2.this关键字 this代表的是当前类的对象,thi ...
- 动手搭建ssm框架
现在很多公司用的开源框架很多都是ssm框架的一个结构,这里我自己试着自己搭一个简单的框架,大家共同学习.下面一起跟着我搭建吧,本人菜鸟,有任何不对的地方有望指出. 框架结构:spring(4.3.9. ...
- 1402:Vigenère密码
[题目描述] 6世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法--Vigenère密码.Vigenère密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为 ...
- golang RWMutex RLock重入导致死锁
现象 一个组件实现了raft分布式协议,在分布式部署环境中来进行选主,在某客户现场突然发生文件句柄泄露,在打印某些错误日志后,几个小时内没有日志打印,然后某个协程突然报无可用的文件句柄. 分析 经过代 ...