标签:
题意:有n个人,m个朋友关系,现在每个人的朋友中必须一半是online一半是offline,问你有几种分配方案。
分析:
昨天一看这题就知道自己做过,无奈想不起来啊,没做出来我就知道应该上一次也没做出来,果然是。勤补题才是王道。
这题用深搜。搜索还是不太会用,这题我自己做的话估计怎么也想不到用dfs。努力啊少年。
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m; int vis[15][15]; int on[100],off[100]; struct node{ int u,v; }edge[100]; int ans; void dfs(int a) { if(a==m+1){ ans++;return; } int i=edge[a].u,j=edge[a].v; if(on[i]&&on[j]){ on[i]--,on[j]--; dfs(a+1); on[i]++,on[j]++; } if(off[i]&&off[j]){ off[i]--,off[j]--; dfs(a+1); off[i]++,off[j]++; } } int main() { int t; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); int a,b; memset(vis,0,sizeof(vis)); for(int i=1;i<=m;i++){ scanf("%d%d",&a,&b); vis[a][b]=vis[b][a]=1; edge[i].u=a,edge[i].v=b; } int ok=1; for(int i=1;i<=n;i++){ int cnt=0; for(int j=1;j<=n;j++){ if(vis[i][j]) cnt++; } on[i]=off[i]=cnt/2; if(cnt&1){ok=0;} } if(!ok) printf("0\n"); else{ ans=0; dfs(1); printf("%d\n",ans); } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
!HDU 5305 朋友关系网一半网友问题-dfs-(暴力搜索)
标签:
原文地址:http://blog.csdn.net/ac_0_summer/article/details/47324069