Peaceful Teams

题目大意

将 \(n\) 个人分成 \(T\) 组,要求每组不能包含敌对的人,问有多少种分法。

思路分析

注意到 \(n,T\) 均很小,考虑爆搜。

注意到直接枚举会枚举到分组顺序的全排列,所以可以强行嵌定大小关系去重。

void dfs(int s){
if(s==n+1){
for(int i=1;i<=t;i++) if(!tt[i]) return ;
for(int i=2;i<=t;i++) if(sk[i-1][1]>sk[i][1]) return ;//去重
ans++;
return ;
}
for(int i=1;i<=t;i++){
int flag=0;
for(int j=1;j<=tt[i];j++) if(bad[sk[i][j]][s]){flag=1;break;}//判断敌对
if(flag) continue;
sk[i][++tt[i]]=s;
dfs(s+1);
tt[i]--;
}
}

正常搜索的时间复杂度为 \(O(T^n)\),无法通过,于是加一点点剪枝:

  • 如果当前人数小于当前的空组数,那么填到最后一定存在空组,直接返回。

  • 每次搜索都优先判定是否合法。

然后就飞过去了。

代码

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdio> using namespace std;
const int N=110; int ans,n,t,m,in1,in2;
int bad[N][N],sk[N][N],tt[N]; void dfs(int s){
for(int i=2;i<=t;i++)
if(tt[i-1]&&tt[i]&&sk[i-1][1]>sk[i][1]) return ;
int cnt=0;
for(int i=1;i<=t;i++)
if(!tt[i]) cnt++;
if(n-s+1<cnt) return ;
if(s==n+1){
for(int i=1;i<=t;i++) if(!tt[i]) return ;
ans++;
return ;
}
for(int i=1;i<=t;i++){
int flag=0;
for(int j=1;j<=tt[i];j++) if(bad[sk[i][j]][s]){flag=1;break;}
if(flag) continue;
sk[i][++tt[i]]=s;
dfs(s+1);
tt[i]--;
}
} int main(){
scanf("%d%d%d",&n,&t,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&in1,&in2);
bad[in1][in2]=bad[in2][in1]=1;
}
dfs(1);
cout<<ans<<'\n';
return 0;
}

[ABC310D] Peaceful Teams 题解的更多相关文章

  1. codeforce1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) 题解

    秉承ACM团队合作的思想懒,这篇blog只有部分题解,剩余的请前往星感大神Star_Feel的blog食用(表示男神汉克斯更懒不屑于写我们分别代写了下...) C. Cloud Computing 扫 ...

  2. 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) 几道简单题的题解

    A. Toda 2 题意:给你n个人,每个人的分数是a[i],每次可以从两个人到五个人的使得分数减一,使得最终的分数相等: 思路:假设答案为m:每个人的分数与答案m的差值为d[i],sum为d[i]的 ...

  3. CF1092B Teams Forming 题解

    Content 有 \(n\) 个学生,每个学生有一个能力值 \(a_i\).现在想把学生两两分成一组,但是不能让每个组里面的学生能力值不相同,因此可以通过刷题来提升自己的能力值,每次解出一道题,能力 ...

  4. UVA 11609 Teams 组合数学+快速幂

    In a galaxy far far away there is an ancient game played among the planets. The specialty of the gam ...

  5. 浙大pat 1011题解

    With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...

  6. 10317 Fans of Footbal Teams(并查集)

    10317 Fans of Footbal Teams 时间限制:1000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: G++;GCC Description ...

  7. 【CF1133E】K Balanced Teams(动态规划,单调队列)

    [CF1133E]K Balanced Teams(动态规划,单调队列) 题面 CF 让你把一堆数选一些出来分成不超过\(K\)组,每一组里面的最大值和最小值之差不超过\(5\),求最多有多少个人元素 ...

  8. Codeforces Round #443 (Div. 1) B. Teams Formation

    B. Teams Formation link http://codeforces.com/contest/878/problem/B describe This time the Berland T ...

  9. Programming Contest Ranking(题解)

    Programming Contest Ranking . 题目描述 Heilongjiang Programming Contest will end successfully! And your ...

  10. URAL题解一

    URAL题解一 URAL 1002 题目描述:一种记住手机号的方法就是将字母与数字对应,如图.这样就可以只记住一些单词,而不用记住数字.给出一个数字串和n个单词,用最少的单词数来代替数字串,输出对应的 ...

随机推荐

  1. 使用GoEasy快速实现Android原生app中的websocket消息推送

    摘要: GoEasy带来了一项令开发者振奋的消息:全面支持Android原生平台!现在,您可以在Android应用中使用最酷炫的实时通信功能,借助GoEasy轻松实现消息的发送和接收.本文将带您领略G ...

  2. 项目完成小结:使用Blazor和gRPC开发大模型客户端

    前言 先介绍下这个项目. 最近我一直在探索大语言模型,根据不同场景训练了好几个模型,为了让用户测试使用,需要开发前端. 这时候,用 Gradio 搭建的前端是不太够的,虽说 GitHub 上也有一堆开 ...

  3. 用git bash 生成 hexo 博客文件,报错node: command not found

    有git bash,也安装了node.js, 为什么在bash里面会说node: command not found? 电脑有段时间不能上网,下载了360系统急救箱,删了很多文件,包括一些exe文件, ...

  4. Struts2 小知识点

    配置struts.xml文件,选择开发模式 在实际应用开发或者是产品部署的时候,对应着两种模式: 开发模式(devMode):此时 DevMode=ture: 产品模式(proMode):此时 Dev ...

  5. 【转载】Linux虚拟化KVM-Qemu分析(三)之KVM源码(1)

    原文信息: 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作 ...

  6. 刷了一个月AI歌唱的视频 做一个大胆预测

    现在的AI热点转到ChatAI和AI唱歌去了 很好理解(现在每天在看Neuro的切片 感慨这才是看V的初心 可惜Neuro这个形象在创立的时候只是一个ChatAI 和游戏用的GameBOT并不是同一个 ...

  7. Ubuntu新建Django工程错误:ModuleNotFoundError: No module named 'distutils.core'

    ubuntu18.04 默认没有安装 pip ,需要安装 python3-pip,即可解决 1 sudo apt-get install python3-pip 在shell脚本中输入以下命令: 1 ...

  8. Unity三维数学总结

    三维向量和三角函数   三维向量 向量是指一个同时具有大小和方向,且满足平行四边形法则的几何对象. 向量的模 po点相对于世界坐标原点的距离: po.magnitude. 标准向量,归一向量,指的是将 ...

  9. 分布式TCC事务相关问题

    TCC分别是Try,Confirm,Cancel,分为三阶段. 第一阶段Try:业务检查及资源预留,尝试事务操作但不提交. 第二阶段Confirm:事务操作提交. 第三阶段Cancel:如果Try阶段 ...

  10. 关于 LLM 和图数据库、知识图谱的那些事

    本文整理自 NebulaGraph 布道师 wey 在「夜谈 LLM」主题分享上的演讲,主要包括以下内容: 背景 LLM RAG Graph 知识抽取 Text2Cypher Graph RAG 未来 ...