【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 ;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apollo自动驾驶入门课程第④讲 — 感知(上)

目录 1. 感知的概述 2. 计算机视觉 3. 摄像头图像 4. LiDAR图像 5. 机器学习 6. 神经网络 7. 反向滤波法 本文转自微信公众号&#xff1a;Apollo开发者社区 原创&#xff1a; 阿波君 Apollo开发者社区 8月23日 上一篇文章中&#xff0c;我们发布了无人驾驶技术的 定位篇…

三种经典的洗牌算法

参考原文链接&#xff1a;https://blog.csdn.net/qq_25026989/article/details/89512769 问题描述&#xff1a;洗牌算法是将原来的数组进行打散&#xff0c;使原数组的某个数在打散后的数组中的每个位置上等概率的出现。 主要有3中经典的洗牌算法&#xff1a; 1.抽牌&#x…

【数据库实验课堂】实验一:数据库的管理

实验一&#xff1a;数据库的管理 1、假设SQL Server服务已启动&#xff0c;并以Administrator身份登录计算机&#xff08;文件名称自定&#xff09;&#xff1b;请分别使用Management界面方式和T-SQL语句实现以下操作&#xff1a; 1) 要求在本地磁盘D创建一个学生-课程数据库…

网络编程懒人入门(二):快速理解网络通信协议(下篇)

转自即时通讯网&#xff1a;http://www.52im.net/ 原作者&#xff1a;阮一峰(ruanyifeng.com&#xff09;&#xff0c;本文由即时通讯网重新整理发布&#xff0c;感谢原作者的无私分享。 1、前言 本文上篇《网络编程懒人入门(一)&#xff1a;快速理解网络通信协议&#xff0…

为什么说逻辑回归LR是线性分类器?

问题描述&#xff1a;为什么说逻辑回归LR是非常典型的线性分类器&#xff1f; 首先&#xff0c;我们要弄明白区分线性与非线性分类器的标准是什么&#xff1f;是决策边界&#xff08;Decision Boundary&#xff09; 以二分类&#xff08;LR可以用于多分类&#xff09;为例进行…

【数据库实验课堂】实验二 使用SQL Server管理数据表

实验二 使用SQL Server管理数据表&#xff1a; 1、请在指定数据库内完成以下内容&#xff1a; 1) 依据数据表的结构创建相对应的数据表&#xff0c;表结构如下所示&#xff1b; **学生信息表&#xff08;student&#xff09;**字段名称 字段类型及长度 说明 备注 S…

5, Data Augmentation

Intro 这是深度学习第5课 在本课程结束时&#xff0c;您将能够使用数据增强。 这个技巧让你看起来拥有的数据远远超过实际拥有的数据&#xff0c;从而产生更好的模型。 Lesson [1] from IPython.display import YouTubeVideo YouTubeVideo(ypt_BAotCLo, width800, height45…

朴素贝叶斯算法注意事项(有待完善)

1.朴素贝叶斯算法的优缺点总结&#xff1a; 优点&#xff1a; 朴素贝叶斯模型发源于古典数学理论&#xff0c;有稳定的分类效率&#xff1b;分类速度快&#xff0c;准确度高&#xff1b;对缺失数据不太敏感&#xff0c;算法简单&#xff0c;常用于文本分类&#xff08;如新闻…

网络编程懒人入门(三):快速理解TCP协议一篇就够

转自即时通讯网&#xff1a;http://www.52im.net/ 原作者&#xff1a;阮一峰(ruanyifeng.com&#xff09;&#xff0c;本文由即时通讯网重新整理发布&#xff0c;感谢原作者的无私分享。 1、前言 本系列文章的前两篇《网络编程懒人入门(一)&#xff1a;快速理解网络通信协议…

【数据库实验课堂】实验三:管理SQL Server表数据

以课本指定的数据库为例&#xff0c;并依据数据表的结构创建相对应的数据表&#xff08;student、course、sc&#xff09;&#xff0c;请分别使用Management Stuio界面方式及T-SQL 语句实现进行以下操作&#xff1a; 向各个数据表中插入如下记录&#xff1a; 学生信息表&#…

分类问题的模型评估指标总结

在分类任务下&#xff0c;预测结果(Predicted Condition)与正确标记(True Condition)之间存在四中不同的组合&#xff0c;构成混淆矩阵(可适用于多分类)&#xff0c;通常有这几种主要模型评估指标&#xff1a;精确率(查的准)、召回率(查的全对正样本的区分能力)、F1值(反映模型…

6. A Deeper Understanding of Deep Learning

Intro 这是深度学习第6课。 在本课程结束时&#xff0c;您将了解随机梯度下降和反向传播如何用在深度学习模型中设置权重。 这些主题很复杂&#xff0c;但许多专家认为它们是深度学习中最重要的思想。 Lesson [1] from IPython.display import YouTubeVideo YouTubeVideo(…

JetBrains - IDEA 常用快捷键汇总

【常规】 CtrlShift Enter&#xff0c;语句完成“&#xff01;”&#xff0c;否定完成&#xff0c;输入表达式时按 “&#xff01;”键CtrlE&#xff0c;最近的文件CtrlShiftE&#xff0c;最近更改的文件ShiftClick&#xff0c;可以关闭文件Ctrl[ OR ]&#xff0c;可以跑到大…

nltk安装punkt等语料库时报SSL错误完美解决方案及离线安装方法

nltk是NLP领域中一个比较通用的国际分词工具&#xff0c;但是使用时往往依赖语料库数据包&#xff0c;需要安装到本地&#xff0c;以下介绍在线安装和离线安装两种方式&#xff1a; &#xff08;ps&#xff1a;对NLP感兴趣的朋友可以相互学习&#xff0c;我的微信号&#xff1…

7. Deep Learning From Scratch

Intro 这是深度学习第7课。 到目前为止&#xff0c;您构建的模型依赖于预先训练的模型。 但它们不是许多用例的理想解决方案。 在本课程中&#xff0c;您将学习如何构建全新的模型。 Lesson [1] from IPython.display import YouTubeVideo YouTubeVideo(YbNE3zhtsoo, widt…

【POJ - 3126】Prime Path(bfs)

题干&#xff1a; 给你两个四位的素数a&#xff0c;b。 a可以改变某一位上的数字变成c&#xff0c;但只有当c也是四位的素数时才能进行这种改变。 请你计算a最少经过多少次上述变换才能变成b。 例如&#xff1a;1033 -> 8179 1033 1733 3733 3739 3779 8779 8179 最…

最实用的Git命令总结:新建本地分支、远程分支、关联和取消关联分支、清除本地和远程分支、合并分支、版本还原、tag命令、中文乱码解决方案、如何fork一个分支和修改后发起合并请求

1.常用命令git、tag整理 1、新建分支本地分支 git branch <branch-name>远程分支 git push origin <branch-name>:<new-branch-name> 2、删除分支本地分支 git branch -d <branch-name> 或 git branch -D <branch-name>远程分支 git push o…

8. Dropout and Strides For Larger Models

Intro 这是深度学习第8课。 本科结束后&#xff0c;你将会理解并知道如何使用&#xff1a; Stride lengths来快速建立模型并减少内存消耗&#xff1b;Dropout 来对抗过拟合&#xff1b; 这两个技术在大型模型中很有用。 Lesson [1] from IPython.display import YouTubeV…

【POJ - 2255】Tree Recovery (给定树的先序中序,输出后序)

题干&#xff1a; Input The input will contain one or more test cases. Each test case consists of one line containing two strings preord and inord, representing the preorder traversal and inorder traversal of a binary tree. Both strings consist of unique…

Java基础部分快速复习(以前复习的时候放在自己的新浪博客上)

工作后Java基本没有用到&#xff0c;有时候自己也会把基础过一遍&#xff0c;下面的链接是以前重温的时候整理的Java基础最核心部分的知识点和代码示例放在自己的新浪博客上&#xff0c;如果以后有需要&#xff0c;直接从这里进入&#xff0c;可以快速复习&#xff0c;节省时间…