2 条题解
-
0
#include<bits/stdc++.h> using namespace std; int n,m,vn,vvn; bool Map[110][110],v[110],vv[110]; void dfs(int x) { if(x>n) { if(vn>vvn)memcpy(vv,v,sizeof(v)),vvn=vn; return ; } bool flag=1;for(int i=1;i<=n;i++)if(Map[i][x]&&v[i]){flag=0;break;} for(int i=1; i>=0; i--) { if(flag==0 && i==1)continue; v[x]=i; vn+=v[x]; if(vn+n-x>vvn)dfs(x+1); vn-=v[x]; v[x]=0; } } int main() { int T;scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); memset(Map,0,sizeof(Map)); for(int i=1;i<=m;i++) { int x,y;scanf("%d%d",&x,&y);Map[x][y]=Map[y][x]=1; } memset(v,0,sizeof(v)); vvn=vn=0;dfs(1); printf("%d\n",vvn); for(int i=1;i<=n;i++) if(vv[i]) printf("%d ",i); printf("\n"); } return 0; } -
0
#include<bits/stdc++.h> using namespace std; int n,m,vn,vvn; bool Map[110][110],v[110],vv[110]; void dfs(int x) { if(x>n) { if(vn>vvn)memcpy(vv,v,sizeof(v)),vvn=vn; return ; } bool flag=1;for(int i=1;i<=n;i++)if(Map[i][x]&&v[i]){flag=0;break;} for(int i=1;i>=0;i--) { if(flag==0 && i==1)continue; v[x]=i; vn+=v[x]; if(vn+n-x>vvn)dfs(x+1); vn-=v[x]; v[x]=0; } } int main() { int T;scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); memset(Map,0,sizeof(Map)); for(int i=1;i<=m;i++) { int x,y;scanf("%d%d",&x,&y);Map[x][y]=Map[y][x]=1; } memset(v,0,sizeof(v)); vvn=vn=0;dfs(1); printf("%d\n",vvn); for(int i=1;i<=n;i++) if(vv[i]) printf("%d ",i); printf("\n"); } return 0; }
- 1
信息
- ID
- 455
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 26
- 已通过
- 17
- 上传者