HDU 5305 Friends (DFS)
来源:互联网 发布:什么是java注解 编辑:程序博客网 时间:2024/05/17 15:42
Friends
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 163 Accepted Submission(s): 61
Problem Description
There are n people and m pairs of friends. For every pair of friends, they can choose to become online friends (communicating using online applications) or offline friends (mostly using face-to-face communication). However, everyone in thesen people wants to have the same number of online and offline friends (i.e. If one person hasx onine friends, he or she must have x offline friends too, but different people can have different number of online or offline friends). Please determine how many ways there are to satisfy their requirements.
Input
The first line of the input is a single integerT (T=100) , indicating the number of testcases.
For each testcase, the first line contains two integersn (1≤n≤8) and m (0≤m≤n(n−1)2) , indicating the number of people and the number of pairs of friends, respectively. Each of the nextm lines contains two numbers x and y , which mean x and y are friends. It is guaranteed that x≠y and every friend relationship will appear at most once.
For each testcase, the first line contains two integers
Output
For each testcase, print one number indicating the answer.
Sample Input
23 31 22 33 14 41 22 33 44 1
Sample Output
02
#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <cstring>#include <queue>#include <stack>using namespace std;struct edge{ int u, v;};edge e[30];int deg[30], c1[30], c2[30];int t, n, m, ans;void dfs(int cur){ if(cur==m) { ans++; return; } int u=e[cur].u, v=e[cur].v; if(c1[u] && c1[v]) { c1[u]--, c1[v]--; dfs(cur+1); c1[u]++, c1[v]++; } if(c2[u] && c2[v]) { c2[u]--, c2[v]--; dfs(cur+1); c2[u]++, c2[v]++; } return;}int main(){ scanf("%d", &t); while(t--) { memset(deg, 0, sizeof(deg)); scanf("%d%d", &n, &m); for(int i=0; i<m; i++) { scanf("%d%d", &e[i].u, &e[i].v); deg[e[i].u]++; deg[e[i].v]++; } bool flag=true; for(int i=1; i<=n; i++) { if(deg[i]%2) { flag=false; break; } c1[i]=deg[i]/2; c2[i]=deg[i]/2; } ans=0; if(flag) { dfs(0); printf("%d\n", ans); } else { printf("0\n"); } } return 0;}
0 0
- HDU 5305 Friends (DFS)
- HDU 5305 Friends (DFS)
- hdu 5305 Friends (dfs)
- HDU 5305 Friends DFS
- hdu 5305 Friends dfs
- HDU 5305 Friends(DFS)
- HDU 5305 Friends(dfs)
- HDU 5305 Friends(dfs)
- *HDU 5305 - Friends (DFS + 剪枝)
- HDU 5305 Friends(dfs)
- hdu 5305 Friends(dfs)
- HDU 5305 Friends DFS+剪枝
- HDU 5305 Friends(DFS + 剪枝)
- HDU 5305 Friends(简单DFS)
- hdu(5305)——Friends(dfs)
- HDU 5305 Friends(2015多校第二场 dfs + 剪枝)
- 【HDU 5305】Friends 多校第二场(双向DFS)
- HDU 5301 Friends(DFS + 枚举)
- 一句话说明浮点数为何不能直接 if(f== 0.0)这样判断
- Linux kernel 分析之二十:内存管理-内核中的页表映射总结
- UVA11997 K Smallest Sums(并归,优先队列)
- an internal error occurred during building workspace
- zoj 1204 Additive equations
- HDU 5305 Friends (DFS)
- 1008. Elevator (20)
- linux awk命令详解
- 用队列实现栈
- 二分法查找(Binary Search)
- 关于jsp的include
- 最长严格上升子序列
- 小白学开发(iOS)OC_类方法和对象方法(2015-07-22)
- apache无法解析php解决方法