hdoj5305【dfs】

来源:互联网 发布:阅读软件塞班版 编辑:程序博客网 时间:2024/06/06 09:00

Friends

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2078    Accepted Submission(s): 1027


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 these n people wants to have the same number of online and offline friends (i.e. If one person has x 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 integer T (T=100), indicating the number of testcases. 

For each testcase, the first line contains two integers n (1n8) and m (0mn(n1)2), indicating the number of people and the number of pairs of friends, respectively. Each of the next m lines contains two numbers x and y, which mean x and y are friends. It is guaranteed that xy and every friend relationship will appear at most once. 
 

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
 

Author
XJZX
 

Source
2015 Multi-University Training Contest 2
 


题意:n个人m对朋友关系,每个人可以选择他的朋友为网络朋友或现实朋友且这两种朋友的个数必须相等,问有多少种方法满足条件。

解题思路:按照所给的朋友关系要么这对关系为网路朋友要么为现实朋友dfs即可

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#include<list>#include<queue>#include<vector>using namespace std;const int maxn=100;int n,m;long long ans=0;struct Node{int a,b;}A[70];int ol[maxn],of[maxn],vis[10];;bool judge(){for(int i=1;i<=m;++i){if(of[A[i].a]!=ol[A[i].a]||of[A[i].b]!=ol[A[i].b])return false;}return true;}void dfs(int k){if(k==m+1){//if(judge())ans++;return ;}ol[A[k].a]++;ol[A[k].b]++;if(ol[A[k].a]<=vis[A[k].a]/2&&ol[A[k].b]<=vis[A[k].b]/2)dfs(k+1);ol[A[k].a]--;ol[A[k].b]--;of[A[k].a]++;of[A[k].b]++;if(of[A[k].a]<=vis[A[k].a]/2&&of[A[k].b]<=vis[A[k].b]/2)dfs(k+1);of[A[k].a]--;of[A[k].b]--;}int main(){int t,i,j,k;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);memset(ol,0,sizeof(ol));memset(of,0,sizeof(of));memset(vis,0,sizeof(vis));for(i=1;i<=m;++i){scanf("%d%d",&A[i].a,&A[i].b);vis[A[i].a]++;vis[A[i].b]++;}for(i=1;i<=n;++i){if(vis[i]&1)break;}if(i<=n){printf("0\n");continue;}ans=0;dfs(1);printf("%lld\n",ans);}return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 助理消防工程师报考条件 一级消防工程师真题 注册消防工程师好考吗 一级消防好考吗 二级注册消防工程师报名时间 注册消防工程师前景 消防工程师考试题型 助理消防工程师 一级消防工程师论坛 注册消防工程师考试难度 一级消防工程师考试题型 注册二级消防工程师 注册消防工程师论坛 一级注册消防工程师教材 注册消防工程师报名 二级消防工程师考试科目 消防工程师报考条件二级 二级注册消防工程师报考条件 一级注册消防工程师论坛 二级消防工程师好考吗 一级注册消防工程师招聘 注册消防工程师难考吗 考一级消防工程师有用吗 消防工程师难度 一消防工程师 一级消防工程师考试难度 一级消防工程师好考吗 消防工程师待遇 注册消防工程师一级二级区别 一级注册消防工程师好考吗 注册消防工程师好不好考 一级消防工程师难度 二级注册消防工程师考试科目 二级消防考试时间 一级消防工程师招聘 陕西二级消防工程师报名时间 2017消防工程师考试时间 消防工程师代报名 消防技术综合能力 一级注册消防工程师报考条件 河北二级消防工程师报名时间