hdu 5305 friends
来源:互联网 发布:public cms官网 编辑:程序博客网 时间:2024/05/20 06:40
每一次比赛的时候脑子都卡顿,
这次更离谱,我竟然二进制枚举边,这么大的复杂度,并且剪不了枝
后来学长说着是道爆搜,搜每一条边,恍然大悟。
只需要剪掉点的度数是奇数的时候,或者他的线上朋友或线下朋友大于等于度数的1/2时候的枝,
跑了15ms
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int x[100],y[100];int of[100],on[100];int n,m;int deg[10];int ans ;void dfs(int u){ if(u==m+1){ for(int i=1;i<=n;i++){ if(of[i]!=on[i]) return; ans++; return; } } if(on[x[u]]<deg[x[u]]/2&&on[y[u]]<deg[y[u]]/2){ on[x[u]]++,on[y[u]]++; dfs(u+1); on[x[u]]--,on[y[u]]--; } if(of[x[u]]<deg[x[u]]/2&&of[y[u]]<deg[y[u]]/2){ of[x[u]]++,of[y[u]]++; dfs(u+1); of[x[u]]--,of[y[u]]--; }}int main(){ int T; scanf("%d",&T); while(T--){ int flag= 1; memset(deg,0,sizeof(deg)); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d",&x[i],&y[i]); deg[x[i]]++; deg[y[i]]++; } for(int i=1;i<=n;i++){ if(deg[i]%2){ printf("0\n"); flag = 0; break; } } if(!flag) continue; memset(on,0,sizeof(on)); memset(of,0,sizeof(of)); ans = 0; dfs(1); printf("%d\n",ans); }}
1 0
- HDU 5305 Friends (DFS)
- hdu 5305 Friends
- HDU 5305 Friends (DFS)
- hdu 5305 Friends 【暴搜】
- hdu 5305 friends
- HDU 5305 Friends
- HDU 5305 Friends
- HDU 5305 Friends
- HDU 5305 Friends(深搜)
- F - Friends-HDU 5305
- hdu 5305 Friends (dfs)
- HDU 5305(Friends-暴搜)
- HDU 5305 Friends DFS
- hdu 5305 Friends dfs
- HDU 5305 Friends
- HDU 5305 Friends(DFS)
- HDU 5305 Friends(dfs)
- HDU 5305 Friends
- HDOJ 2141 Can you find it?(二分)
- 【C++】编写一个智能指针类。
- android rom制作之bootimg的详细介绍和使用
- java制作的亲戚计算器(三姑六婆计算器)
- iOS开发之autoLayout constraint
- hdu 5305 friends
- 单向链表删除节点
- jsp获取Request请求参数
- 解决本地打开Android API文档缓慢的问题
- 2012年5月SAT香港真题解析
- go语言学习笔记
- 过河卒(动态规划)
- php实现Bloom Filter
- iOS开发系列--视图切换