记录编号 34512 评测结果 AWWWWWWWWW
题目名称 [USACO Mar08] 麻烦的干草打包机 最终得分 10
用户昵称 GravatarQhelDIV 是否通过 未通过
代码语言 C++ 运行时间 0.003 s
提交时间 2011-12-17 14:06:00 内存使用 1.00 MiB
显示代码纯文本
#include<fstream>
using namespace std;
ifstream fin("baler.in");
ofstream fout("baler.out");

int N,T_x,T_y,S_pos,T_pos,Total,Max;
int Map[1060][1060],Min=100000000;
bool bo=false;
class
{
public:
	int X,Y,S,D;
	double L;
}Gear[1060];

bool check(int p1,int p2)
{
int ox,oy;
	ox=Gear[p1].X-Gear[p2].X;
	ox=ox*ox;
	oy=Gear[p1].Y-Gear[p2].Y;
	oy=oy*oy;
	if(ox+oy==int((Gear[p1].L+Gear[p2].L)*(Gear[p1].L+Gear[p2].L)))
		return true;
	else
		return false;
}

void init()
{
int i,j;	
	fin>>N>>T_x>>T_y;
	
	for(i=1;i<=N;i++)
	{
		fin>>Gear[i].X>>Gear[i].Y>>Gear[i].L;
		if(Gear[i].X==0 && Gear[i].Y==0)
			S_pos=i;
		if(Gear[i].X==T_x && Gear[i].Y==T_y)
			T_pos=i;		
	}
	
	Gear[S_pos].S=10000;
	Gear[S_pos].D=1;
	
	for(i=1;i<=N;i++)
		for(j=i+1;j<=N;j++)
			if(check(i,j)==true)
			{
				Map[i][++Map[i][0]]=j;
				Map[j][++Map[j][0]]=i;
			}
	
	Total=10000;Max=Total;
}

void Ad_Hoc(int x)
{
int i,j;
	if(x==T_pos)
	{
		if(Min>Total)
			Min=Total;
	}
	if(bo==false)
	for(i=1;i<=Map[x][0];i++)
		if(Gear[Map[x][i]].S==0)
		{
			Gear[Map[x][i]].S=Gear[x].S*(Gear[x].L/Gear[Map[x][i]].L);
			Gear[Map[x][i]].S=0-Gear[Map[x][i]].S;
			
			Total=Total+((Gear[Map[x][i]].S>0)?Gear[Map[x][i]].S:(0-Gear[Map[x][i]].S));
			
			Ad_Hoc(Map[x][i]);
			Total=Total-((Gear[x].S>0)?Gear[x].S:(0-Gear[x].S));
		}
}

int main()
{
	init();
	
	Ad_Hoc(S_pos);
	fout<<Min<<endl;
	fin.close();
	fout.close();
}