HDU 5305 Friends (搜索+剪枝) 2015多校联合第二场
2024-09-07 09:18:30
開始对点搜索,直接写乱了。想了想对边搜索,尽管复杂度高。剪枝一下水过去了。
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector> using namespace std; struct Edge{
int a,b;
}G[35]; int n,m,deg[10],on[10],off[10];
int res; void init(){
memset(deg,0,sizeof(deg));
res = 0;
} void dfs(int u){
//printf("%d\n",u);
if(u == m){
res++;
return;
}
int a,b;
a = G[u].a;b = G[u].b;
deg[a]--;deg[b]--; on[a]++;on[b]++;
if((deg[a] && deg[b]) ||
(!deg[a] && deg[b] && on[a] == off[a]) ||
(!deg[b] && deg[a] && on[b] == off[b]) ||
(!deg[a] && !deg[b] && on[a] == off[a] && on[b] == off[b]))
dfs(u+1);
on[a]--;on[b]--; off[a]++;off[b]++;
if((deg[a] && deg[b]) ||
(!deg[a] && deg[b] && on[a] == off[a]) ||
(!deg[b] && deg[a] && on[b] == off[b]) ||
(!deg[a] && !deg[b] && on[a] == off[a] && on[b] == off[b]))
dfs(u+1);
off[a]--;off[b]--;
deg[a]++;deg[b]++;
} int main(){
int cas; scanf("%d",&cas);
while(cas--){
scanf("%d%d",&n,&m);
init();
for(int i=0;i<m;i++){
scanf("%d%d",&G[i].a,&G[i].b);
deg[G[i].a]++;deg[G[i].b]++;
}
dfs(0);
printf("%d\n",res);
}
return 0;
}
最新文章
- 如何让js不产生冲突,避免全局变量的泛滥,合理运用命名空间
- Cocos2d入门--1--初涉相关属性或代码
- Linux下的paste合并命令详解
- ASP.NET读取配置文件发送邮件
- Eclipse错误
- LinkButton( 按钮)
- javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景
- Couchbase 中的分布式储存
- webpack4配置详解之新手上路初探
- ubuntu18.04静态ip设置
- MapReduce多种join实现实例分析(二)
- 小奶狗给小喵咪上CSS课程
- 细说一下position(定位),以及其他的小知识
- 20款最好的jQuery文件上传插件
- MySQL将DESC等关键字作为列名表名的处理方式
- BitArray源码解析
- 01-Python的基础知识2
- 在 Azure 中的 Windows 虚拟机上使用 SSL 证书保护 IIS Web 服务器
- 为什要使用预编译SQL?(转)
- [转]为Kindeditor控件添加图片自动上传功能
热门文章
- 【分享】GEARS of DRAGOON 1+2【日文硬盘版】[带全CG存档&;amp;攻略+SSG改动+打开存档补丁]
- fgets()函数和sscanf()函数的使用方法
- Gzip压缩优化网站
- js中的三种函数写法
- 云:VMware
- 13. Roman to Integer[E]罗马数字转整数
- Redis学习笔记(六) 基本命令:List操作
- HD-ACM算法专攻系列(17)——find your present (2)
- hdu 1754 I Hate It【线段树】
- 03《UML大战需求分析》之三