首页 > 其他分享 >Living-Dream 系列笔记 第91期

Living-Dream 系列笔记 第91期

时间:2025-01-16 16:46:26浏览次数:1  
标签:Living cur int 国人 mm 补图 91 Dream 最大

最大团

一张图的最大团被定义为它的一个极大的完全子图。

对于任意一张图,我们都有如下结论:其最大团就是其补图的最大独立集。读者自证不难。

于是乎,只要一张图的补图为二分图,我们就可以轻松求出它的最大团。

P2764

抽象一下题意,我们发现我们需要连一条边使得最大团的大小加一。

在补图中,连边会变为删边,又因为 \(最大团 = 补图最大独立集 = 补图总点数-最小点覆盖=补图总点数-最大匹配\),所以要让最大团更大,最大匹配应当更小。

于是,我们暴力地枚举删哪一条匹配,然后暴力地检验最大匹配是否变少即可。

时间复杂度最坏可以达到 \(O(n^5)\),显然无法通过,但可以获得 \(60 pts\) 的高分。正解也许会出现在第 93 期中。

code
#include<bits/stdc++.h>
using namespace std;

const int N=1e4+5;
int n,m;
int idx,ans;
int match[N],match2[N],vis[N],color[N];
vector<int> G[N],T[N];
vector<pair<int,int> > Ans;

void fillit(int cur,int c){
	color[cur]=c;
	for(int i:G[cur])
		if(!color[i])
			fillit(i,3-c);
}
bool hungary(int* mm,int cur,int pre,int nxt){
	if(vis[cur]==idx){
		return 0;
	}
	vis[cur]=idx;
	for(int i:T[cur]){
		if(cur==pre&&i==nxt)
			continue;
		if(!mm[i]||hungary(mm,mm[i],pre,nxt)){
			mm[i]=cur;
			return 1;
		}
	}
	return 0;
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>m;
	for(int i=1,u,v;i<=m;i++){
		cin>>u>>v;
		G[u].push_back(v);
		G[v].push_back(u);
	}
	for(int i=1;i<=n;i++)
		if(!color[i])
			fillit(i,1);
	for(int i=1;i<=n;i++){
		for(int j:G[i]){
			if(color[i]==1)
				T[i].push_back(j);
			else
				T[j].push_back(i);
		}
	}
	for(int i=1;i<=n;i++){
		if(color[i]==1){
			idx++;
			if(hungary(match,i,-1,-1))
				ans++;
		}
	}
	for(int i=1;i<=n;i++){
		if(color[i]==2){
			memset(match2,0,sizeof match2);
			int nowans=0;
			for(int j=1;j<=n;j++){
				if(color[j]==1){
					idx++;
					if(hungary(match2,j,match[i],i))
						nowans++;
				}
			}
			if(nowans<ans)
				Ans.push_back({min(match[i],i),max(match[i],i)});
		}
	}
	sort(Ans.begin(),Ans.end());
	cout<<Ans.size()<<'\n';
	for(auto i:Ans)
		cout<<i.first<<' '<<i.second<<'\n';
	return 0;
}

总结:

  • 寻找一个网络中两两之间有关系的一群东西,考虑最大团。

  • 最大团问题分析补图。

  • 做题从概念出发。

P2423

根据朋友圈的定义我们容易发现这是一个最大团问题,但是哪来的二分图???

进行一个条件的解读:

  • A 国:对于两个友善值为 \(a,b\) 的 A 国人,\((a\mathbin{\mathrm{xor}} b) \bmod 2=1\) 这个条件意味着若它们是朋友,则 \(a,b\) 奇偶性不同。

  • B 国:反之。第二个条件无需解读,直接判即可。

那么 B 国的补图就是 \(a,b\) 奇偶性不同的连边,我们把奇数点看作左部点,偶数点看作右部点,二分图出来了。

显然不考虑 A 国的时候,本题答案即为 \(B\) 国的最大团。

但是 A 国加进来怎么办?这启发我们去挖掘性质。

因为 A 国是奇偶不同连边,根据抽屉原理,A 国一定不能加进来超过 \(2\) 人,因为到了第 \(3\) 个人就一定会与前两个人中的某一个不连边,形成不了最大团。

那么我们暴力地去枚举 A 国加哪些人(如果加两个人,则他们俩必须是朋友),然后将他们所连接的 B 国人求一次最大团即可。

但是有一种方法是不行的,就是把 B 国的人全放进来求一遍最大团,然后再选 A 国人加入。一方面我们无法知道最大团的方案,也就无法验证其正确性;另一方面,将 B 国人全求一遍最大团不一定最优,我们完全可以少选几个然后多加几个 A 国人进来。

同样,将 A 国人加入和 B 国人一起求最大团更是不行的,因为我们无法保证 A 国人加进来以后还是二分图。

为什么我要讲以上两种错误方法呢,还不是因为老师的误导(光速逃)。

综上,本题是巨大困难图论题,并且结合了数学知识,考察了我们解读条件挖掘性质的能力,还要求我们具有转换角度的思想(因为正常人都会往错误方法一想),确实是一道极好的题目。

标签:Living,cur,int,国人,mm,补图,91,Dream,最大
From: https://www.cnblogs.com/XOF-0-0/p/18675255

相关文章

  • VP Codeforces Round 911 (Div. 2)
    A.CoverinWater题意:有n个格子,有些格子是好的,有些是坏的,你要给好格子都装上水,你可以花费一点价值让一个格子有水,也可以把一个格子的水移到另一个格子,没有花费。如果一个格子是好格子并且两边的格子都有水,这个格子就会自己填满水。问最少花费让所有好格子有水。容易想到,如果......
  • 【0391】Postgres内核 checkpointer process ① 启动初始化
    相关文章:【0108】checkpointer运行原理(概念篇)(1)【0278】checkpointer共享内存(CheckpointerShmem)初始化(3)文章目录1.启动checkpointerprocess1.1初始化checkpointerPID1.2注册signal1.3初始化lastcheckpointtime2.确认config的sharedmemoryv......
  • 【RAG框架】蚂蚁开源新RAG框架KAG,可达91%准确率
    本文探一探蚂蚁开源的另外一套知识增强生成框架KAG(KnowledgeAugmentedGeneration),专门用于构建垂直领域知识库的逻辑推理问答框架,论文中提到在电子政务达到了91.6的准确率,电子医疗各个问答也有不俗的准确率。本文会简单的介绍一下KAG的概念和构建流程,然后尝试在本地启动KA......
  • Living-Dream 系列笔记 第90期
    鲜花:其实一直想改一下笔记的形式,以一个算法专题作为一篇博文的内容。这个系列到100期就完结吧。二分图最大独立集选择最多的点,使得这个点集中的点互相没有连边。答案显然为\(n-最小点覆盖=n-最大匹配\)(\(n\)为总点数)。但是好像最小点覆盖那一期忘记写了,所以解释一下为什么......
  • 计算机毕业设计—270917 SSM流浪宠物领养系统(源码免费领)
    摘 要流浪宠物一直是影响城市环境与居民生活的一个不可忽略的因素。基于此,本文设计并实现一个流浪宠物领养系统。用户可以通过本系统查看搜索流浪宠物的相关信息、进行领养申请,为其提供爱心帮助。本系统有效地解决了流浪宠物领养工作开展困难等问题,为流浪宠物与社会爱动物......
  • 计算机毕业设计—291145 SSM车辆管理系统(源码免费领)
    摘 要科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规则和开发步骤,采用SSM技术建设车......
  • #1791. 单词翻转
    题目描述输入一个句子(一行),将句子中的每一个单词翻转后输出。输入格式只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。输出格式翻转每一个单词后的字符串,单词之间的空格需与原文一致。输入数据1helloworld输出数据1ollehdlrow代码:#include<bits/s......
  • 你知道网页三剑客指的是什么吗?你有用过Dreamwear吗?
    网页三剑客指的是一套强大的网页编辑工具,它们分别是Dreamweaver、Fireworks和Flash。这三个软件最初是由美国的Macromedia公司开发出来的,后来被Adobe公司收购。它们各自在网页设计和开发过程中发挥着不同的作用,相互之间能够无缝合作,因此被形象地称为“网页三剑客”。Dreamweave......
  • Dreamweaver修改织梦网站源码全攻略:从基础操作到高级定制
    Dreamweaver是一款强大的可视化网页编辑工具,非常适合用来修改基于织梦CMS构建的网站源码。以下是几个实用技巧,帮助开发者更高效地完成这项任务:项目结构理解:熟悉织梦网站的整体目录结构,了解各个文件夹和文件的作用。特别是data、include、templets等关键路径下的内容,对于后续开发......
  • SpringBoot人事管理912fw(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表部门,员工,考勤信息,工资发放,员工请假,加班登记,迟到登记,培训信息,报名信息,文档档案,签到信息开题报告内容一、研究背景随着企业规模的不断扩大和管理需求的......