Gym-101915D Largest Group 最大独立集 Or 状态压缩DP
题面
题意:给你N个男生,N个女生,男生与男生之间都是朋友,女生之间也是,再给你m个关系,告诉你哪些男女是朋友,最后问你最多选几个人出来,大家互相是朋友. N最多为20
题解:很显然就像二分图了,男生一边女生一边的,然后一种解法就是
求图的最大独立集,(看起来很巧,实则也不知道为何2333)
(最大独立集是一个点集,其中任意两点在图中无对应边,对于一般图来说,最大独立集是一个NP完全问题,对于二分图来说最大独立集=|V|-二分图的最大匹配数)
我们本来连边是,所有的朋友关系连边(男女就行了,同性都可以忽略了因为肯定可以)
但我们现在把这个图边连满,然后把有关系的边删掉,再求最大独立集,此时要求他们没有对应边不就是实际上选了那条边了吗
#include<bits/stdc++.h>
#define N 155
int T,n,m,x,y,used[N],g[N][N],val[N],ans;
using namespace std;
int dfs(int x)
{
for (int i=;i<=n;i++)
{
if (g[x][i]==-) continue;
if (!used[i])
{
used[i]=;
if (val[i]==- || dfs(val[i]))
{
val[i]=x;
return ;
}
}
}
return ;
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(g,,sizeof(g));
memset(val,-,sizeof(val));
while (m--)
{
scanf("%d%d",&x,&y);
g[x][y]=-;
}
ans=*n;
for (int i=;i<=n;i++)
{
memset(used,,sizeof(used));
ans-=dfs(i);
}
printf("%d\n",ans);
}
}
赛后,其他队有人写的是状态压缩dp,哈哈,一看数据范围20,确实可以直接暴力统计答案了,
f[st]表示男生状态为st的时候,女生的状态为什么(st是一个20位的数,f[st]也是哈,每位0,1表示这个人选不选)
题解直接就写在下面代码注释了
#include<bits/stdc++.h>
using namespace std;
#define lld long long
int T,n,m,f[<<+],x,y,ll[];
int main()
{
scanf("%d",&T);
while (T--)
{
scanf("%d%d",&n,&m);
int all=<<n;
for (int i=;i<all;i++) f[i]=;
memset(ll,,sizeof(ll));
while (m--)
{
scanf("%d%d",&x,&y);
ll[x]|=(<<(y-));//把x的第y位变成1
}
int ans=n;
f[]=all-;
for (int st=;st<all;st++)
{
int pos=__builtin_ffs(st);//返回x中最后一个为1的位是从后向前的第几位
f[st]=f[st^(<<(pos-))] & ll[pos];//st的第pos位拿出来取反 然后和这个人pos的好友状态 是否合法
ans=max(ans, __builtin_popcount(f[st])+__builtin_popcount(st));//f[st]表示当男生选择集合为st的时候,女生的状态
}
printf("%d\n",ans);
}
}
Gym-101915D Largest Group 最大独立集 Or 状态压缩DP的更多相关文章
- Gym - 101915D Largest Group 最大团
给你一个二分图 问你最大团为多大 解一:状压DP 解二:二分图最大匹配 二分图的最大团=补图的最大独立集 二分图最大独立集=二分图定点个数-最大匹配 //Hungary #include<bit ...
- BZOJ1688|二进制枚举子集| 状态压缩DP
Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...
- 【bzoj1688】[USACO2005 Open]Disease Manangement 疾病管理 状态压缩dp+背包dp
题目描述 Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the farm. Far ...
- HDU_3182_Hamburger Magi_状态压缩dp
Hamburger Magi Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hoj2662 状态压缩dp
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- [知识点]状态压缩DP
// 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...
- HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP
题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...
- DP大作战—状态压缩dp
题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...
随机推荐
- Android学习——数据存储之文件存储
将数据存储到文件中并读取数据 1.新建FilePersistenceTest项目,并修改activity_main.xml中的代码,如下:(只加入了EditText,用于输入文本内容,不管输入什么按下 ...
- android studio高德地图的显示于定位(附带逆地理编码围栏)
首先注册高德成为开发者(打开高德地图,点击底部的开发者平台),创建应用,按照要求填写相应信息 网站:http://lbs.amap.com/api/android-sdk/guide/create-p ...
- java的原子变量
java的原子变量类似c++的InterlockedDecrement()操作.其实就是在进行算术时,把整个算式看为一个整体,并且保证同一时间只计算该式子一次. 它的用途比如,多个线程可能会调用某个函 ...
- response.getWriter().write()乱码问题
前台代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> & ...
- Java_Web之状态管理
回顾及作业点评: (1)JSP如何处理客户端的请求? 使用response对象处理响应 (2)请描述转发与重定向有何区别? 转发是在服务器端发挥作用,通过forward方法将提交信息在多个页面间进行传 ...
- 【sqli-labs】 less28 GET- Error based -All you Union&Select Belong to us -String -Single quote with parenthesis(GET型基于错误的去除了Union和Select的单引号带括号字符串型注入)
这个不是基于错误的吧,看源码可以知道错误并没有输出 那就使用;%00和order by试一下 http://192.168.136.128/sqli-labs-master/Less-28/?id=1 ...
- String类练习统计一个字符串中大小写字母及数字字符个数
public class StringPractice { public static void main(String[] args) { //创建一个文本扫描器 Scanner sc = new ...
- javaee IO流打印一行的方式
package Dayin; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.F ...
- json-lib与Jackson的区别和用法分析
一.Jackson概述 1.jackson包和版本 Jackson fasterxml和codehaus的区别: 他们是Jackson的两大分支.也是两个版本的不同包名.Jackson从2.0开始改用 ...
- 【C#】【分享】 XXX分钟学会C#
原文地址 https://www.cnblogs.com/younShieh/p/10945264.html 前几天在刷即刻的时候发现了一个GitHub上的项目,该项目名为"lear ...