【HDU 5305】Friends 多校第二场(双向DFS)
依据题意的话最多32条边,直接暴力的话 2 ^ 32肯定超时了。我们能够分两次搜索时间复杂度降低为 2 * 2 ^ 16
唯一须要注意的就是对眼下状态的哈希处理。
我採用的是 十进制表示法
跑的还是比較快的,可能是用STL函数的原因添加了一些常数复杂度。
#include<map>
#include<vector>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
typedef pair<int,int> pill;
const int maxn = 55;
struct Edge{
int a,b;
}edge[maxn];
int n,m;
LL cnt,base[15];
int _count[15];
map<pill,int>vis;
void init(){
base[1] = 1;
for(int i = 2; i < 10; i++)
base[i] = base[i - 1] * 10;
}
void calc(int state1,int state2,int &a,int &b){
int base = 1;
for(int i = 1; i <= n; i++){
int d1 = state1 % 10, d2 = state2 % 10;
int v1 = _count[i] - d1, v2 = _count[i] - d2;
a += base * v1;
b += base * v2;
base *= 10;
state1 /= 10;
state2 /= 10;
}
}
void dfs1(int now,int finish,int state1,int state2){
if(now == finish){
vis[make_pair(state1,state2)] ++;
return;
}
int a = edge[now].a, b = edge[now].b;
dfs1(now + 1,finish,state1 + base[a] + base[b],state2);
dfs1(now + 1,finish,state1,state2 + base[a] + base[b]);
}
void dfs2(int now,int finish,int state1,int state2){
if(now == finish){
int x = 0,y = 0;
calc(state1,state2,x,y);
if(x >= 0 && y >= 0)
cnt += vis[make_pair(x,y)];
return;
}
int a = edge[now].a, b = edge[now].b;
dfs2(now + 1,finish,state1 + base[a] + base[b],state2);
dfs2(now + 1,finish,state1,state2 + base[a] + base[b]);
}
int main(){
int T;
init();
scanf("%d",&T);
while(T--){
vis.clear();
memset(_count,0,sizeof(_count));
scanf("%d%d",&n,&m);
for(int i = 0; i < m; i++){
scanf("%d%d",&edge[i].a,&edge[i].b);
_count[edge[i].a] ++;
_count[edge[i].b] ++;
}
int ok = 1;
for(int i = 1; i <= n; i++){
if(_count[i] % 2 != 0){
ok = 0;
break;
}
_count[i] /= 2;
}
cnt = 0;
if(ok){
dfs1(0,m / 2,0,0);
dfs2(m / 2,m,0,0);
}
printf("%d\n",cnt);
}
return 0;
}
【HDU 5305】Friends 多校第二场(双向DFS)的更多相关文章
- 2019牛客多校第二场 A  Eddy Walker(概率推公式)
		2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ... 
- hdu 5305 Friends(2015多校第二场第6题)记忆化搜索
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5305 题意:给你n个人,m条关系,关系可以是online也可以是offline,让你求在保证所有人on ... 
- 2014多校第二场1011 || HDU 4882 ZCC Loves Codefires (贪心)
		题目链接 题意 : 给出n个问题,每个问题有两个参数,一个ei(所要耗费的时间),一个ki(能得到的score).每道问题需要耗费:(当前耗费的时间)*ki,问怎样组合问题的处理顺序可以使得耗费达到最 ... 
- HDU 4612 (13年多校第二场1002)无向图缩点,有重边
		这道题是多校的题,比赛的时候是一道纷纷水过的板刷题. 题意:给你一些无向边,只加一条边,使该图的桥最少,然后输出最少的桥. 思路:当时大致想到思路了,就是缩点之后找出最长的链,然后用总的桥数减去链上的 ... 
- hdu 5308 (2015多校第二场第9题)脑洞模拟题,无语
		题目链接:http://acm.hdu.edu.cn/listproblem.php?vol=44 题意:给你n个n,如果能在n-1次运算之后(加减乘除)结果为24的输出n-1次运算的过程,如果不能输 ... 
- hdu 5301 Buildings (2015多校第二场第2题) 简单模拟
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5301 题意:给你一个n*m的矩形,可以分成n*m个1*1的小矩形,再给你一个坐标(x,y),表示黑格子 ... 
- [2019HDU多校第二场][HDU 6591][A. Another Chess Problem]
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6591 题目大意:二维坐标系上,所有满足\(5|2x+y\)的点都被设为障碍物,无法通过.现给出一对点, ... 
- hdu 6055 : Regular polygon (2017 多校第二场 1011) 【计算几何】
		题目链接 有个结论: 平面坐标系上,坐标为整数的情况下,n个点组成正n边形时,只可能组成正方形. 然后根据这个结论来做. 我是先把所有点按照 x为第一关键字,y为第二关键字 排序,然后枚举向量 (p[ ... 
- HDU6602 Longest Subarray hdu多校第二场 线段树
		HDU6602 Longest Subarray 线段树 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6602 题意: 给你一段区间,让你求最长的区间使 ... 
随机推荐
- 在Windows平台下安装与配置Memcached及C#使用方法
			1.在Windows下安装Memcached 资料来源:http://www.jb51.net/article/30334.htm 在Windows平台下安装与配置Memcached的方法,Memca ... 
- ASP.NET Core 1.0基础之静态文件处理
			来源 这些HTML , CSS files, image files, 和JavaScript这些静态文件,是ASP.NET能够直接响应给客户端的.本文详述下ASP.NET和静态文件的关系. Serv ... 
- jquery获取下拉列表的值和显示内容的方法
			页面的下拉列表: 选择时间段: <select name="timespan" id="timespan" class="Wdate" ... 
- macOS中Vim基本配置,颜色主题/语法/indent设置
			macOS中Vim基本配置 Vim的初始化配置 .vimrc 存放位置 macOS 环境下 vim 的初始化配置文件为 .vimrc , 通常有两个(系统版本和用户版本),一个位于 /usr/shar ... 
- Linux下使用GDB进行调试
			Linux下使用GDB进行调试的常用命令记于此. $ sudo su # g++ -g test.cpp -o test -pthread # gdb test <------- ... 
- javascript快速入门24--XML基础
			XML简介 XML代表Extensible Markup Language(eXtensible Markup Language的缩写,意为可扩展的标记语言).XML 被设计用来传输和存储数据.XML ... 
- oracle 存储过程的一个小问题
			在存储过程中,一般不能直接使用DDL语句,需要借助 execute immediate方法,否则可能报 pls00103错误 例子如下: create or replace procedure rt_ ... 
- REOBJECT structure
			REOBJECT structure 包含丰富编辑控件中的OLE或图像对象的信息. Syntax 语法 typedef struct _reobject { DWORD cbStruct; LON ... 
- docker入门——简介
			从这里起航 本系列有感于<第一本Docker书>,当我拿到这本书时感觉如获至宝. 为了培养自己对docker的兴趣,不断鞭策自己,我决定开始写这个系列的博客——<站在蓝鲸的背上思考& ... 
- Rails时间扩展方法
			1.时间扩展方法: beginning_of_day,end_of_day等等 Time.now.end_of_day 2.ruby类型判断 is_a?(类型) 如:b.is_a?(Array) 
