Friends

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 297    Accepted Submission(s): 127

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 (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 next m 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. 
 
Output
For each testcase, print one number indicating the answer.
 
Sample Input
2
3 3
1 2
2 3
3 1
4 4
1 2
2 3
3 4
4 1
 
Sample Output
0
2
 
Source

/*

题意:n个人,m个关系。每一个人和别人的关喜有线上和线下,求每一个人线上和线下的关系一样多的方案数
思路: dfs
先贴别人代码,跑的快
,我的跑的慢 */ #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<set>
#include<map> #define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MID(x,y) ((x+y)>>1) #define eps 1e-8
using namespace std; typedef __int64 LL; #define N 100 int x[N],y[N],in[N],on[N],off[N];
int n,m;
int ans; bool judge()
{
if(m&1) return false;
for(int i=1;i<=n;i++) if(in[i]&1) return false;
return true;
} void dfs(int pos)
{
if(pos==m)
{
ans++;
return ;
}
int u=x[pos],v=y[pos];
if(on[u]<in[u]/2&&on[v]<in[v]/2) //这个边为online 边
{
on[u]++;
on[v]++;
dfs(pos+1);
on[u]--;
on[v]--;
} if(off[u]<in[u]/2&&off[v]<in[v]/2) //这个边为off边
{
off[u]++;
off[v]++;
dfs(pos+1);
off[u]--;
off[v]--;
}
}
int main()
{
int i,j,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
memset(in,0,sizeof(in));
memset(on,0,sizeof(on));
memset(off,0,sizeof(off)); for(i=0;i<m;i++)
{
scanf("%d%d",&x[i],&y[i]);
in[x[i]]++;
in[y[i]]++;
}
ans=0;
if(!judge())
{
printf("0\n");
continue;
}
dfs(0);
printf("%d\n",ans);
}
return 0;
}

/*
我的代码
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<set>
#include<map> #define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MID(x,y) ((x+y)>>1) #define bug printf("hihi\n") #define eps 1e-8
typedef __int64 ll; using namespace std; #define INF 0x3f3f3f3f #define N 1<<8 __int64 ans; int on[N],down[N];
int n,m,f[N],in[N]; inline int get(int x)
{
int s=0;
while(x)
{
s++;
x&=(x-1);
}
return s;
} inline bool judge(int pos,int cur)
{
int i;
for(i=0;i<n;i++)
if(on[i]&(1<<pos)&&!(cur&(1<<i))) return false; for(i=0;i<n;i++)
if(down[i]&(1<<pos)&&(cur&(1<<i))) return false;
return true;
} void dfs(int pos)
{
if(pos==n)
{
ans++;
return ;
}
int i,len=1<<n;
for(i=0;i<len;i++)
{
if((f[pos]&i)!=i) continue;
int tt=get(i);
if(tt!=in[pos]/2) continue;
if(!judge(pos,i)) continue;
on[pos]=i;
down[pos]=f[pos]^i;
dfs(pos+1);
on[pos]=0;
down[pos]=0;
}
} int main()
{
int i,j,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
int u,v;
memset(f,0,sizeof(f));
memset(on,0,sizeof(on));
memset(down,0,sizeof(down));
memset(in,0,sizeof(in));
bool flag=false;
if(m&1) flag=true;
while(m--)
{
scanf("%d%d",&u,&v);
u--;v--;
f[u]|=1<<v;
f[v]|=1<<u;
in[u]++;
in[v]++;
} for(i=0;i<n;i++)
{
if(in[i]&1) flag=true;
}
if(flag)
{
printf("0\n");
continue;
}
ans=0;
int len=1<<n;
for(i=0;i<len;i++)
{
if((f[0]&i)!=i) continue;
int tt=get(i);
if(tt!=in[0]/2) continue;
on[0]=i;
down[0]=f[0]^i;
dfs(1);
on[0]=0;
down[0]=0;
}
printf("%I64d\n",ans);
}
return 0;
}

HDU 5305 Friends(dfs)的更多相关文章

  1. HDU 5965 扫雷(dfs)题解

    题意:给你一个3*n的格子,中间那行表明的是周围8格(当然左右都没有)的炸弹数量,上下两行都可以放炸弹,问你有几种可能,对mod取模 思路:显然(不),当i - 1和i - 2确定时,那么i的个数一定 ...

  2. HDU 1518 Square(DFS)

    Problem Description Given a set of sticks of various lengths, is it possible to join them end-to-end ...

  3. HDU 1015 Safecracker (DFS)

    题意:给一个数字n(n<=12000000)和一个字符串s(s<=17),字符串的全是有大写字母组成,字母的大小按照字母表的顺序,比如(A=1,B=2,......Z=26),从该字符串中 ...

  4. Hdu 1175 连连看(DFS)

    Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1175 因为题目只问能不能搜到,没问最少要几个弯才能搜到,所以我采取了DFS. 因为与Hdu ...

  5. hdu 2821 Pusher (dfs)

    把这个写出来是不是就意味着把   http://www.hacker.org/push  这个游戏打爆了? ~啊哈哈哈 其实只要找到一个就可以退出了  所以效率也不算很低的  可以直接DFS呀呀呀呀 ...

  6. hdu 2821 Pusher(dfs)

    Problem Description PusherBoy is an online game http://www.hacker.org/push . There is an R * C grid, ...

  7. HDU 1501 Zipper(DFS)

    Problem Description Given three strings, you are to determine whether the third string can be formed ...

  8. HDU 2553 N皇后问题(dfs)

    N皇后问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 在 ...

  9. HDU 5934 Bomb(炸弹)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

随机推荐

  1. js中true和false判断

    布尔类型里只有这6参数个返回false,其它都为true Boolean(false) // false Boolean(undefined) // false Boolean(null) // fa ...

  2. python实现qq机器人qqbot

    title: python实现qq机器人qqbot tags: python date: 2018-6-1 10:19:00 --- 以下内容为转载 一.介绍 qqbot 是一个用 python 实现 ...

  3. java继承问题

    代码: 父类: public class Father { public Father() { System.out.println("基类构造函数{"); show(); new ...

  4. Crash reporter

    A crash reporter is a software application whose function is to identify report crash details and to ...

  5. WEB前端响应式布局之BootStarp使用

    1.Bootstrap简介:1. 概念: 一个前端开发的框架,Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JavaScript 的 ...

  6. SQlite数据库框架:LitePal

    常用的数据库框架Android的发展的速度是难以置信的,Android出来哪一年我还在小学上学很,还能很清楚的记得,那年一切,但是那个时候的我怎么可能也不会想到自己将来会要去做Android.Andr ...

  7. Pycharm中通过扩展工具添加QTDesigner

    1.在电脑中找到Designer.exe的安装目录: 2.在pycharm中打开file->Settings->Tools->External Tools进行配置: 配置如下图所示: ...

  8. <SpringMvc>入门二 常用注解

    1.@RequestMapping @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME ...

  9. buf.writeUInt32BE()

    buf.writeUInt32BE(value, offset[, noAssert]) buf.writeUInt32LE(value, offset[, noAssert]) value {Num ...

  10. LINUX-用户和群组

    groupadd group_name 创建一个新用户组 groupdel group_name 删除一个用户组 groupmod -n new_group_name old_group_name 重 ...