记录编号 |
69204 |
评测结果 |
AAAAAAAAA |
题目名称 |
篱笆回路 |
最终得分 |
100 |
用户昵称 |
digital-T |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.004 s |
提交时间 |
2013-09-11 20:36:47 |
内存使用 |
0.32 MiB |
显示代码纯文本
#include<fstream>
#include<cmath>
using namespace std;
ifstream fi("fence6.in");
ofstream fo("fence6.out");
int n,l[101],sum[101][2],connect[101][2][9],ans;
bool boo[101]={false};
bool check(int x,int y)//返回y号在x号中的0还是1里
{
int i;
for(i=1;i<=sum[x][0];i++)
if(connect[x][0][i]==y)return false;
return true;
}
void dfs(int x,int way,int len)//用x号,寻找方向way,总长度len
{
int i,y;
for(i=1;i<=sum[x][way];i++)
{
y=connect[x][way][i];
if(boo[y])
{
ans=min(ans,len);
/*for(int j=1;j<=n;j++)
if(boo[j])fo<<j<<' ';
fo<<endl;*/
}
else
{
boo[y]=true;
if(check(y,x))
dfs(y,0,len+l[y]);
else
dfs(y,1,len+l[y]);
boo[y]=false;
}
}
}
int main()
{
fi>>n;
int i,j,k;
for(i=1;i<=n;i++)
{
fi>>k;
fi>>l[k]>>sum[k][0]>>sum[k][1];
//fo<<k<<endl;
for(j=1;j<=sum[k][0];j++)
fi>>connect[k][0][j];
for(j=1;j<=sum[k][1];j++)
fi>>connect[k][1][j];
}
ans=1000000;
for(k=1;k<=n;k++)
{
boo[k]=true;
dfs(k,0,l[k]);
boo[k]=false;
}
fo<<ans<<endl;
return 0;
}