题目传送门

  1. /*
  2. 题意:每个点都要有偶数条边,且边染色成相同的两部分,问能有多少种染色方法
  3. DFS+剪枝:按照边数来DFS,每种染色数为该点入度的一半,还有如果点不是偶数边就不DFS
  4. 这是别人的DFS,写的精简强大,膜拜之。。。
  5. */
  6. #include <cstdio>
  7. #include <algorithm>
  8. #include <cstring>
  9. #include <vector>
  10. using namespace std;
  11. const int MAXN = ;
  12. const int INF = 0x3f3f3f3f;
  13. int d[MAXN], c1[MAXN], c2[MAXN];
  14. int a[MAXN], b[MAXN];
  15. int n, m, ans;
  16. void DFS(int k) {
  17. if (k == m + ) {
  18. ans++; return ;
  19. }
  20. int u = a[k], v = b[k];
  21. if (c1[u] < d[u] && c1[v] < d[v]) {
  22. c1[u]++; c1[v]++;
  23. DFS (k + );
  24. c1[u]--; c1[v]--;
  25. }
  26. if (c2[u] < d[u] && c2[v] < d[v]) {
  27. c2[u]++; c2[v]++;
  28. DFS (k + );
  29. c2[u]--; c2[v]--;
  30. }
  31. }
  32. int main(void) { //HDOJ 5305 Friends
  33. //freopen ("F.in", "r", stdin);
  34. int t; scanf ("%d", &t);
  35. while (t--) {
  36. memset (d, , sizeof (d));
  37. scanf ("%d%d", &n, &m);
  38. for (int i=; i<=m; ++i) {
  39. scanf ("%d%d", &a[i], &b[i]);
  40. d[a[i]]++; d[b[i]]++;
  41. }
  42. bool flag = true;
  43. for (int i=; i<=n; ++i) {
  44. if (d[i] & ) {
  45. flag = false; break;
  46. }
  47. d[i] /= ;
  48. }
  49. if (!flag) {
  50. puts (""); continue;
  51. }
  52. memset (c1, , sizeof (c1));
  53. memset (c2, , sizeof (c2));
  54. ans = ; DFS ();
  55. printf ("%d\n", ans);
  56. }
  57. return ;
  58. }

DFS HDU 5305 Friends的更多相关文章

  1. HDU 5305 Friends dfs

    Friends 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5305 Description There are n people and m pa ...

  2. HDU 5305 Friends (DFS,穷举+剪枝)

    题意: 给定n个人,m对朋友关系,如果对于每个人,只能刚好选择其所有朋友中的一半的人进行聊天(只是我和我的朋友,不是我的朋友和我的朋友),那么有多少种情况?只要一个选择不同,视为不同情况. 思路: 比 ...

  3. HDU 5305 Friends(简单DFS)

    Friends Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Su ...

  4. HDU 5305 Friends(dfs)

    Friends Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Su ...

  5. 【HDU 5305】Friends 多校第二场(双向DFS)

    依据题意的话最多32条边,直接暴力的话 2 ^ 32肯定超时了.我们能够分两次搜索时间复杂度降低为 2 * 2  ^ 16 唯一须要注意的就是对眼下状态的哈希处理. 我採用的是 十进制表示法 跑的还是 ...

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

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

  7. DFS hdu 1016

    http://acm.hdu.edu.cn/showproblem.php?pid=1016 #include <iostream> using namespace std; int a[ ...

  8. 变形课(DFS hdu 1181)

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...

  9. hdu 5305 friends

    每一次比赛的时候脑子都卡顿, 这次更离谱,我居然二进制枚举边,这么大的复杂度.而且剪不了枝 后来学长说着是道爆搜.搜每一条边.恍然大悟. 仅仅须要剪掉点的度数是奇数的时候,或者他的线上朋友或线下朋友大 ...

随机推荐

  1. Journey CodeForces - 839C

    There are n cities and n - 1 roads in the Seven Kingdoms, each road connects two cities and we can r ...

  2. Mycat环境搭建教程收集(待实践)

    先收集,后续再实践. http://blog.csdn.net/dreamcode/article/details/44307377 http://blog.csdn.net/lanonola/art ...

  3. Java中如何获取spring中配置的properties文件内容

    有2种方式: 一. 1.通过spring配置properties文件 [java]  <bean id="propertyConfigurer"      class=&qu ...

  4. swift container server 莫名stuck

    openstack swift container server的进程经常莫名其妙进入 D Ds等状态 记录一下这个时候 storage.error的log 便于分析 一种情形是下面这种log Jun ...

  5. 采用jmeter和泛化测试dubbo服务接口

    采用jmeter和泛化测试dubbo服务接口 http://blog.csdn.net/linuu/article/details/54313560

  6. epoll 的accept , read, write

    http://www.ccvita.com/515.html 在一个非阻塞(fcntl)的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就 ...

  7. UVA 567 Risk【floyd】

    题目链接: option=com_onlinejudge&Itemid=8&page=show_problem&problem=508">https://uva ...

  8. linux下常用快捷方式

    一.终端最常用的快捷键: 1.新建终端窗口:crtl+shift+n 2.终端的切换:shift+左右箭头 3.挂起:crtl+s 4.解除挂起:crtl+q 5.清屏:crtl+l 二.命令行光标移 ...

  9. MySql command line client 命令系列

    —————————————————————————————————————————————————————————— 一.启动与退出 1.进入MySQL:启动MySQL Command Line Cl ...

  10. rsync 3.1.1源代码编译安装配置

    http://rsync.samba.org/ rsync-3.1.1.tar.gz ---0.卸载rpm # yum remove rsync -----1.安装: tar -zxvf rsync- ...