比赛 |
20120708 |
评测结果 |
AAAAATTTTT |
题目名称 |
硬币收集者 |
最终得分 |
50 |
用户昵称 |
Citron酱 |
运行时间 |
10.095 s |
代码语言 |
C++ |
内存使用 |
0.32 MiB |
提交时间 |
2012-07-08 10:25:55 |
显示代码纯文本
#include <cstdio>
#define I_F "coinmn.in"
#define O_F "coinmn.out"
const short MAXn=300;
const int MAXc=10000+1;
const long P=10000000;
int s[MAXn][2][2];
short c[MAXc];
short n;
int now=0, ans;
long l;
void Input();
short Root(const short&);
void Dfs(const short&);
void Output();
int main()
{
freopen(I_F,"r",stdin);
freopen(O_F,"w",stdout);
scanf("%hd",&n);
while (n>0)
{
Input();
Dfs(0);
Output();
scanf("%hd",&n);
}
}
short Root(const short &x)
{
if (c[x]!=x)
return Root(c[x]);
return x;
}
void Input()
{
for (int i=0; i<n; ++i)
scanf("%d%d%d%d",&s[i][0][0],&s[i][0][1],&s[i][1][0],&s[i][1][1]);
for (int i=0; i<MAXc; ++i)
c[i]=i;
ans=0;
l=0;
}
void Dfs(const short &x)
{
if (++l>=P)
return;
if (x==n)
{
ans=(now>ans)?now:ans;
return;
}
if (now+(n-x)*2<=ans)
return;
short a,b;
for (short i=0; i<2 && l<P; ++i)
{
a=Root(s[x][i][0]);
b=Root(s[x][i][1]);
if (a!=b)
{
c[b]=a;
now+=2;
Dfs(x+1);
now-=2;
c[b]=b;
}
}
Dfs(x+1);
}
void Output()
{
printf("%d\n",ans);
}