【Gym - 101915D】Largest Group(二分图最大团,状压dp)
题干:
大黑山上有小小民和小小涛两种物种,山东人小李想要研究这两种物种的关系
奇怪的是大黑山上有相同数量的小小民和小小涛。小李数了数一共有 P 个,小李分别给P个小小民和小小涛编号 1 - P 号,已知每对小小民之间都是好朋友,每对小小涛之间也都是好朋友,但是 i 号小小民和 j 号小小涛不一定是好朋友
山东人小李想要知道在这个物种间最大的友好群体的物种数量(在这个群体中任意两个生物都是好朋友),你能帮小李解决这个难题嘛?
Input
第一行一个整数T,代表测试数据数量
每个测试数据第一行有两个整数 P N ,大黑山上小小民或者小小涛的数量 P ,和他们之间有 N 个关系 ( 1<= P <=20 ),( 0<= N <= P^2 )
接下来 N 行每行两个整数 mi ti 表示 mi 编号的小小民和 ti 编号的小小涛是好朋友
Output
对于每个测试数据,输出一个整数表示最大的友好群体中生物的数量
Sample Input
2 4 5 1 2 2 2 3 2 4 2 1 4 3 4 1 2 2 1 1 1 2 2
Sample Output
5 4
解题报告:
直接跑补图最大独立集就行了=二分图中顶点数-最小点覆盖。
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
int p,n;
bool line[22][22];
int nxt[22];
int use[22];
bool find(int x) {for(int i = 1; i<=p; i++) {if(line[x][i] && use[i] == 0) {use[i] = 1;if(nxt[i] == 0 || find(nxt[i])) {nxt[i] = x;return 1;}} }return 0 ;
}
int match() {int res = 0;for(int i = 1; i<=p; i++) {memset(use,0,sizeof use);if(find(i)) res++;}return res;
}
int main()
{int t;cin>>t;while(t--) {memset(line,1,sizeof line);memset(nxt,0,sizeof nxt);scanf("%d%d",&p,&n);for(int a,b,i = 1; i<=n; i++) {scanf("%d%d",&a,&b);line[a][b]=0;}printf("%d\n",2*p-match());} return 0 ;
}
法二:(1400ms竟然能过)
状压dp,复杂度O(n*2^n)枚举
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
int bit[22];
int lowbit(int x) {return x&-x;}
int main()
{int t,p,n;cin>>t;while(t--) {scanf("%d%d",&p,&n);memset(bit,0,sizeof bit);for(int a,b,i = 1; i<=n; i++) {scanf("%d%d",&a,&b);a--;b--;bit[a] |= 1<<b;}int up = 1<<p,ans = 0;for(int sta = 0; sta<up; sta++) {//枚举选择了哪些男生 int tmp = up-1;//记录当前男生情况下可以获得的所有女生 for(int i = 0; i<p; i++) {if(sta&(1<<i)) tmp &= bit[i];}int sum = 0;for(int i = tmp; i!=0; i-=lowbit(i)) {sum++;}for(int i = sta; i!=0; i-=lowbit(i)) sum++; ans = max(ans,sum);}printf("%d\n",ans);}return 0 ;
}
【Gym - 101915D】Largest Group(二分图最大团,状压dp)相关推荐
- HDU 5304 Eastest Magical Day Seep Group's Summer(状压DP+环缩点+生成树计数)
题意:给出一个图m条边和n个顶点,要求删除m-n条边使得原图联通,问有多少种方法. 思路:显然删除后的图是由一棵树和额外的一条边组成的,如果只有树那么可以用MATRIX-TREE定理求出生成树的数量, ...
- hdu5304 Eastest Magical Day Seep Group#39;s Summer 状压dp+生成树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5304 16个点的无向图,问能生成多少个n条边的连通图.(即多一条边的树) 先n^3 * 2^n 枚举全部的 ...
- Codeforces Gym 100676G Training Camp 状压dp
http://codeforces.com/gym/100676 题目大意是告诉你要修n门课,每门课有一个权值w[i], 在第k天修该课程讲获得k*w[i]的学习点数,给出了课程与先修课程的关系,要修 ...
- Gym - 101853E E. Maximum Sum (状压DP)
原题地址:https://codeforces.com/gym/101853/problem/E 题意:给出一个n*n的矩阵,矩阵中每一个格子都有一个权值,选择一个格子就能拿到当前的权值,但是同时就不 ...
- hdu5304 Eastest Magical Day Seep Group's Summer 状压dp+生成树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5304 16个点的无向图,问能生成多少个n条边的连通图.(即多一条边的树) 先n^3 * 2^n 枚举所有的 ...
- CSUST 2007-我爱吃烧烤(状压DP)
题目链接:http://acm.csust.edu.cn/problem/2007 博客园食用链接:https://www.cnblogs.com/lonely-wind-/p/13395416.ht ...
- 牛客推荐系统开发之选飞行棋子(状压dp)
链接:登录-专业IT笔试面试备考平台_牛客网 牛客的新开发的推荐系统使得牛客的DAU(日活跃用户数量)上升了一个档次,于是牛客的老板组织了一场团建.在团建时,牛牛.牛妹.王清楚和茶山牛四人想要愉快地玩 ...
- POJ 1038 Bugs Integrated Inc (复杂的状压DP)
\(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...
- codeforces 8C. Looking for Order 状压dp
题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...
最新文章
- __bridge 使用注意
- javascript 内部函数的定义及调用
- matlab绘制X,Y二维散点图并标出序号
- 创建安卓模拟器的两种方式及常用Android命令介绍
- js作用域与作用域链
- 在NAS上基础构建云存储系统的两种解决方案
- BUG——Celery ValueError: not enough values to unpack
- windows之临时文件
- C/C++函数调用方式
- CodeBlock代码替换
- EasyCVR接入华为视频云系统查询集群编码和查询网关
- 央行企业征信异议处理条件及流程
- LeetCode 1114:按序打印
- 【数据结构】之排序算法综合篇
- 【论文速读】【金融】Predicting stock and stock price index movement using ... and machine learning techniques
- EMW3080 STC15轻松实现设备上云3(阿里云物联网平台、智能生活开放平台)
- vue element 实现table的自动添加列
- ubuntu防火墙命令介绍
- python模拟萌妹音让室友疯狂吃鸡
- 分分钟百万条数据的微博爬虫分析
热门文章
- Objective-C 的OOP(下)-类(static)方法、实例方法、overwrite(覆写)、属性(property)...
- [轉]Flash/Flex监听浏览器的关闭事件
- xfire客户端对返回list很挑剔,所以需要使用泛型。
- [剑指offer]面试题第[68-1]题[Leedcode][JAVA][第235题][二叉搜索树的最近公共祖先][递归][BFS]
- 计算机信息管理相关课题论文,计算机信息管理课题论文[].doc
- 不同型号服务器如何做双击热备,服务器做双机热备教程
- 有效数据外含有额外数据_Excel|应用数据有效性规范数据录入
- 计算机管理员无法创建密码,找到电脑管理员的密码
- linux传文件file,linux文件的传输与压缩快速入门
- asterisk for mipsel