hdu5305 线上朋友和线下朋友(dfs暴力)
2015-08-02 21:56
225 查看
#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include<stdio.h> #include<string.h> #include<vector> #include<algorithm> #include<cmath> #include<map> #include<queue> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1 | 1 #define lowbit(x) x&(-x) using namespace std; const int N=1e5+10; long long INF=-1e15; int T,n,m,k; int ans; const int MOD=1e9+7; int f[10],on[10],off[10]; int tot; void init(){ memset(f,0,sizeof f); memset(on,0,sizeof on); memset(off,0,sizeof off); tot=0; } struct Edge{ int u,v; }edge[64]; void dfs(int n){ if(n==tot){ ans++; return; } int u=edge .u,v=edge .v; if(on[u]>f[u]) return; if(off[u]>f[u]) return; if(on[v]>f[v]) return; if(off[v]>f[v]) return; if(on[u]<f[u] && on[v]<f[v]){ on[u]++;on[v]++; dfs(n+1); on[u]--;on[v]--; } if(off[u]<f[u] && off[v]<f[v]){ off[u]++;off[v]++; dfs(n+1); off[u]--;off[v]--; } } int main() { #ifndef ONLINE_JUDGE freopen("aaa","r",stdin); #endif int T; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); init(); int u,v; for(int i=0;i<m;i++){ scanf("%d%d",&u,&v); f[u]++;f[v]++; edge[tot++]=Edge{u,v}; } for(int i=1;i<=n;i++) f[i]/=2; ans=0; dfs(0); printf("%d\n",ans); } return 0; }
相关文章推荐
- C++对象生命周期(未完)
- Android多线程中UI线程和其他线程进行交互的几种方法小结
- uC/OS-II 函数之任务相关函数
- Oracle经典20题
- STL学习篇:初始了解
- 【LeetCode】202 - Happy Number
- ant配置
- escape、encodeURI、encodeURIComponent不编码的字符
- 单向循环链表实例
- ndk变量会文件找不到解决办法
- 什么是框架(包括前端框架和后端框架)
- 【effective c++读书笔记】【第4章】设计与声明(1)
- [2015hdu多校联赛补题]hdu5296 Annoying problem
- 【effective c++读书笔记】【第4章】设计与声明(1)
- poj 3436 网络流构图经典
- STM32串口程序(寄存器版)
- PageRank与R语言实现
- linux进程间的通信--共享内存
- Qt 判断一个IP地址是否有效
- HDU1018(也是水题)