HDU 5305 DFS
来源:互联网 发布:ubuntu 永久dns 编辑:程序博客网 时间:2024/06/03 12:43
点击打开链接
题意:有n个人和m个关系,对于每个关系有两种可能性,然后每个人的这两种关系的数量必须相同,问你共有多少分配满足条件
思路:因为人比较少并且边也不多,我们可以直接暴力dfs将所有的情况全部找出来就行了,满足条件就是每个人的两种关系都相同
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const ll INF=0x3f3f3f3f3f3f3f3fll;const int maxn=10;int num1[maxn],num2[maxn],du[maxn],U[maxn*3],V[maxn*3];int n,m,ans;void dfs(int x){ if(x==m+1){ int flag=0; for(int i=1;i<=n;i++){ if(num1[i]!=num2[i]) flag=1; } if(flag==0) ans++; return ; } if(num1[U[x]]<du[U[x]]/2&&num1[V[x]]<du[V[x]]/2){ num1[U[x]]++;num1[V[x]]++; dfs(x+1); num1[U[x]]--;num1[V[x]]--; } if(num2[U[x]]<du[U[x]]/2&&num2[V[x]]<du[V[x]]/2){ num2[U[x]]++;num2[V[x]]++; dfs(x+1); num2[U[x]]--;num2[V[x]]--; }}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); memset(num1,0,sizeof(num1)); memset(num2,0,sizeof(num2)); memset(du,0,sizeof(du)); for(int i=1;i<=m;i++){ scanf("%d%d",&U[i],&V[i]); du[U[i]]++;du[V[i]]++; } ans=0;dfs(1); printf("%d\n",ans); } return 0;}
1 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 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 DFS
- 【DFS】HDU
- HDU DFS
- HDU 5305 Friends(简单DFS)
- AAA Java 远程通讯技术及原理分析(最齐全)
- 数组的全排列算法
- MySQL和Tomcat8免安装版本的配置
- Postgresql数据库脚本性能优化纪要
- Web前端开发推荐阅读书籍-精华
- HDU 5305 DFS
- 使用python下载图片
- Java IO流中的flush()方法
- 机器学习 -- 决策树根节点的选择过程
- 给 Android 初学者的 Gradle 知识普及
- hiho第十四周
- Android课程设计,生活记事本
- 机器学习 -- 决策树C45算法使用实例
- 去除List中的重复值