依据题意的话最多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)的更多相关文章

  1. 2019牛客多校第二场 A Eddy Walker(概率推公式)

    2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...

  2. hdu 5305 Friends(2015多校第二场第6题)记忆化搜索

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5305 题意:给你n个人,m条关系,关系可以是online也可以是offline,让你求在保证所有人on ...

  3. 2014多校第二场1011 || HDU 4882 ZCC Loves Codefires (贪心)

    题目链接 题意 : 给出n个问题,每个问题有两个参数,一个ei(所要耗费的时间),一个ki(能得到的score).每道问题需要耗费:(当前耗费的时间)*ki,问怎样组合问题的处理顺序可以使得耗费达到最 ...

  4. HDU 4612 (13年多校第二场1002)无向图缩点,有重边

    这道题是多校的题,比赛的时候是一道纷纷水过的板刷题. 题意:给你一些无向边,只加一条边,使该图的桥最少,然后输出最少的桥. 思路:当时大致想到思路了,就是缩点之后找出最长的链,然后用总的桥数减去链上的 ...

  5. hdu 5308 (2015多校第二场第9题)脑洞模拟题,无语

    题目链接:http://acm.hdu.edu.cn/listproblem.php?vol=44 题意:给你n个n,如果能在n-1次运算之后(加减乘除)结果为24的输出n-1次运算的过程,如果不能输 ...

  6. hdu 5301 Buildings (2015多校第二场第2题) 简单模拟

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5301 题意:给你一个n*m的矩形,可以分成n*m个1*1的小矩形,再给你一个坐标(x,y),表示黑格子 ...

  7. [2019HDU多校第二场][HDU 6591][A. Another Chess Problem]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6591 题目大意:二维坐标系上,所有满足\(5|2x+y\)的点都被设为障碍物,无法通过.现给出一对点, ...

  8. hdu 6055 : Regular polygon (2017 多校第二场 1011) 【计算几何】

    题目链接 有个结论: 平面坐标系上,坐标为整数的情况下,n个点组成正n边形时,只可能组成正方形. 然后根据这个结论来做. 我是先把所有点按照 x为第一关键字,y为第二关键字 排序,然后枚举向量 (p[ ...

  9. HDU6602 Longest Subarray hdu多校第二场 线段树

    HDU6602 Longest Subarray 线段树 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6602 题意: 给你一段区间,让你求最长的区间使 ...

随机推荐

  1. 消息队列系列(三):.Rabbitmq Trace的使用

       一.什么是Trace        Trace是Rabbitmq用于记录每一次发送的消息,方便使用Rabbitmq的开发者调试.排错.可通过插件形式 提供可视化界面   二.Trace实现概况 ...

  2. HashMap深度解析(一)

    HashMap可以说是Java中最常用的集合类框架之一,是Java语言中非常典型的数据结构,我们总会在不经意间用到它,很大程度上方便了我们日常 开发.在很多Java的笔试题中也会被问到,最常见的,“H ...

  3. [Java基础] Java如何实现条件编译

    条件编译绝对是一个好东西.如在C或CPP中,可以通过预处理语句来实现条件编译.但是在JAVA中却没有预处理,宏定义这些东西,而有时在一些项目中,我们又需要条件编译.那么,在JAVA中,该如何实现条件编 ...

  4. 正确看待POW与POS,总结与区分

    POW:Proof of Work,工作证明. 比特币在Block的生成过程中使用了POW机制,一个符合要求的Block Hash由N个前导零构成,零的个数取决于网络的难度值.要得到合理的Block ...

  5. iOS:创建静态库及其使用

    本篇来自转载,原创链接为:http://my.oschina.net/leejan97/blog/284193 摘要: 静态库文件可以有效的将功能封装和细节隐藏  ios 静态库 static lib ...

  6. asp.net权限控制的方式

    我们在使用asp.net开发Web程序的时候经常需要进行一些权限控制,如: 限制用户没有登陆就无法查看一些页面,又或者是说登陆之后如果不是管理员,或是没有响应的权限就无法进行相关的操作. 实现的方法有 ...

  7. 阿里云ECS linux通过rinetd 端口转发来访问内网服务

    一.场景说明: 可以通过端口映射的方式,来通过具有公网的云服务器 ECS 访问用户名下其它未购买公网带宽的内网 ECS 上的服务.端口映射的方案有很多,比如 Linux 下的 SSH Tunnel.r ...

  8. python——TypeError: 'str' does not support the buffer interface

    import socket import sys port=51423 host="localhost" data=b"x"*10485760 #在字符串前加 ...

  9. CoolHash数据库引擎压测对比报告

    Coolhash 当前性能指标:读写吞吐量超过百万,千万级别查询1秒完成,连续48小时打满CPU强压力运行稳定.redis官方公布读写性能在10万 tps,leveldb官方公布写性能在40万tps, ...

  10. Autofc与Mvc,WebForm,Weiapi,Owin整合源码分析

    主要分析一下的几个项目: Autofac.Integration.Mvc Autofac.Integration.WebApi Autofac.Integration.Owin Autofac.Int ...