DFS HDU 5305 Friends
/*
题意:每个点都要有偶数条边,且边染色成相同的两部分,问能有多少种染色方法
DFS+剪枝:按照边数来DFS,每种染色数为该点入度的一半,还有如果点不是偶数边就不DFS
这是别人的DFS,写的精简强大,膜拜之。。。
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std; const int MAXN = ;
const int INF = 0x3f3f3f3f;
int d[MAXN], c1[MAXN], c2[MAXN];
int a[MAXN], b[MAXN];
int n, m, ans; void DFS(int k) {
if (k == m + ) {
ans++; return ;
}
int u = a[k], v = b[k];
if (c1[u] < d[u] && c1[v] < d[v]) {
c1[u]++; c1[v]++;
DFS (k + );
c1[u]--; c1[v]--;
}
if (c2[u] < d[u] && c2[v] < d[v]) {
c2[u]++; c2[v]++;
DFS (k + );
c2[u]--; c2[v]--;
}
} int main(void) { //HDOJ 5305 Friends
//freopen ("F.in", "r", stdin); int t; scanf ("%d", &t);
while (t--) {
memset (d, , sizeof (d));
scanf ("%d%d", &n, &m);
for (int i=; i<=m; ++i) {
scanf ("%d%d", &a[i], &b[i]);
d[a[i]]++; d[b[i]]++;
} bool flag = true;
for (int i=; i<=n; ++i) {
if (d[i] & ) {
flag = false; break;
}
d[i] /= ;
} if (!flag) {
puts (""); continue;
}
memset (c1, , sizeof (c1));
memset (c2, , sizeof (c2));
ans = ; DFS ();
printf ("%d\n", ans);
} return ;
}
DFS HDU 5305 Friends的更多相关文章
- HDU 5305 Friends dfs
Friends 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5305 Description There are n people and m pa ...
- HDU 5305 Friends (DFS,穷举+剪枝)
题意: 给定n个人,m对朋友关系,如果对于每个人,只能刚好选择其所有朋友中的一半的人进行聊天(只是我和我的朋友,不是我的朋友和我的朋友),那么有多少种情况?只要一个选择不同,视为不同情况. 思路: 比 ...
- HDU 5305 Friends(简单DFS)
Friends Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Su ...
- HDU 5305 Friends(dfs)
Friends Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Su ...
- 【HDU 5305】Friends 多校第二场(双向DFS)
依据题意的话最多32条边,直接暴力的话 2 ^ 32肯定超时了.我们能够分两次搜索时间复杂度降低为 2 * 2 ^ 16 唯一须要注意的就是对眼下状态的哈希处理. 我採用的是 十进制表示法 跑的还是 ...
- hdu 5305 Friends(2015多校第二场第6题)记忆化搜索
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5305 题意:给你n个人,m条关系,关系可以是online也可以是offline,让你求在保证所有人on ...
- DFS hdu 1016
http://acm.hdu.edu.cn/showproblem.php?pid=1016 #include <iostream> using namespace std; int a[ ...
- 变形课(DFS hdu 1181)
变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submis ...
- hdu 5305 friends
每一次比赛的时候脑子都卡顿, 这次更离谱,我居然二进制枚举边,这么大的复杂度.而且剪不了枝 后来学长说着是道爆搜.搜每一条边.恍然大悟. 仅仅须要剪掉点的度数是奇数的时候,或者他的线上朋友或线下朋友大 ...
随机推荐
- Django:(7)auth用户认证组件 & 中间件
用户认证组件 用户认证组件: 功能:用session记录登陆验证状态 前提:用户表:django自带的auth_user 创建超级用户的命令: python manage.py createsuper ...
- hdu - 1104 Remainder (bfs + 数论)
http://acm.hdu.edu.cn/showproblem.php?pid=1104 注意这里定义的取模运算和计算机的%是不一样的,这里的取模只会得到非负数. 而%可以得到正数和负数. 所以需 ...
- School Marks-CodeForces
B. School Marks time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- POJ1068 Parencodings 解题报告
Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two diff ...
- UVALive7042(博弈论)
题意: Bob和Alice在有向图内玩游戏,n个顶点,m条边. 每人一颗棋子,初始位置分别是x,y. Bob先手,轮流操作,每次只能走一条有向边. 结束条件: 1.不能操作的人输 2.两个棋子重合Bo ...
- java设计模式——单例设计模式
/*设计模式:对问题行之有效的解决方式.其实它是一种思想. 1,单例设计模式. 解决的问题:就是可以保证一个类在内存中的对象唯一性. 必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的 ...
- ArcGIS Python 编码问题
吐槽一下ArcGIS自带的 Python IDE, 没有代码补全 没有函数提示 没有代码折叠 没有行号 撤销操作还有问题 字符编码还有各种问题 ......... 花了2天时间才琢磨出来的经验 环 ...
- 基于cocos2d-x-3.2学习Box2D(一)
cocos版本号:cocos2d-x-3.2 环境:Win7+VS2013 因为一些太底层的实现我如今的能力学习不到,仅仅能做一些简单的笔记,供以后翻阅.假设别人可以得到帮助,莫大的荣幸. 一.创建世 ...
- Office Excel找不到PERSONAL.XLS怎么办
网上有人说这个文件在XLSTART里面,但是我里面没东西 打开PERSONAL.XLS的情况下,点击文件,属性,弹出窗口就有他的位置 你还是直接用Everything搜索一下吧.
- 【C++ STL应用与实现】18: 怎样使用迭代器适配器
本系列文章的文件夹在这里:文件夹. 通过文件夹里能够对STL整体有个大概了解 前言 本文介绍了STL中的迭代器适配器(iterator adapter)的概念及其用法演示样例.迭代器适配器能够和标准库 ...