比赛 |
20120708 |
评测结果 |
AAATTTTTTT |
题目名称 |
硬币收集者 |
最终得分 |
30 |
用户昵称 |
Czb。 |
运行时间 |
14.665 s |
代码语言 |
C++ |
内存使用 |
0.35 MiB |
提交时间 |
2012-07-08 11:39:21 |
显示代码纯文本
#include<stdio.h>
#include<string.h>
#include<vector>
#define max(a,b) a>b?a:b
using namespace std;
struct orz
{
int x,y;
}a[301][2];
int n,ans;
int flag1[10001];
vector <orz> v;
bool flag()
{
memset(flag1,0,sizeof(flag1));
int tmp=0;
bool bo=true;
for(int i=0;i<v.size();i++)
{
flag1[v[i].x]++;
flag1[v[i].y]++;
}
while(bo)
{
bo=false;
for(int i=0;i<v.size();i++)
{
if(flag1[v[i].x]==1||flag1[v[i].y]==1)
{
bo=true;
tmp++;
flag1[v[i].x]--;
flag1[v[i].y]--;
}
}
}
if(tmp==v.size())
return true;
return false;
}
void dfs(int k)
{
if(k>n)
{
if(flag())
{
ans=max(ans,v.size());
}
return;
}
dfs(k+1);
if(a[k][0].x!=a[k][0].y)
{
v.push_back(a[k][0]);
dfs(k+1);
v.pop_back();
}
if(a[k][1].x!=a[k][1].y)
{
v.push_back(a[k][1]);
dfs(k+1);
v.pop_back();
}
}
int main()
{
freopen("coinmn.in","r",stdin);
freopen("coinmn.out","w",stdout);
int i,j;
for(scanf("%d",&n);n;scanf("%d",&n))
{
ans=0;
for(i=1;i<=n;i++)
{
scanf("%d%d",&a[i][0].x,&a[i][0].y);
scanf("%d%d",&a[i][1].x,&a[i][1].y);
}
dfs(1);
printf("%d\n",ans<<1);
}
return 0;
}