标签:
题意:给出n个人,m对朋友,要求每个人的A类朋友跟B类朋友一样多,求种类数
……不会做……我想爆搜……当时我还太年轻,并不知道怎么爆搜……
这样,维护一个d数组,di表示i的状态,若i有一个A就+1,否则-1,这样若是一样多,肯定di最后=0
爆搜所有边的状态即可,因为边足够多的时候,有些边之间相互制约,所以实际上跑得并不太慢
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#include<bitset>
#include<climits>
#include<list>
#include<iomanip>
#include<stack>
#include<set>
using namespace std;
bool edge[10][10];
int d[10],ans,n,m;
void dfs(int v,int u)
{
if(v>n)
{
ans++;
return;
}
if(u>n)
{
if(d[v])
return;
dfs(v+1,v+2);
return;
}
if(edge[v][u])
{
d[v]++;
d[u]++;
dfs(v,u+1);
d[v]-=2;
d[u]-=2;
dfs(v,u+1);
d[v]++;
d[u]++;
}
else
dfs(v,u+1);
}
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n>>m;
memset(edge,0,sizeof(edge));
while(m--)
{
int a,b;
cin>>a>>b;
edge[a][b]=edge[b][a]=1;
}
ans=0;
memset(d,0,sizeof(d));
dfs(1,2);
cout<<ans<<endl;
}
}
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 731 Accepted Submission(s): 346
2 3 3 1 2 2 3 3 1 4 4 1 2 2 3 3 4 4 1
0 2
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/stl112514/article/details/47038939