标签:
题意:给出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