记录编号 69204 评测结果 AAAAAAAAA
题目名称 篱笆回路 最终得分 100
用户昵称 Gravatardigital-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;
}