比赛 |
HAOI2009 模拟试题3 |
评测结果 |
AAAAA |
题目名称 |
医院设置 |
最终得分 |
100 |
用户昵称 |
TBK |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-06-28 14:21:40 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <iomanip>
#include <vector>
#include <set>
#include <algorithm>
#define MAXN 0x7fffffff
using namespace std;
int a,b,c,d,h,t,x[1000],s,n,y[101];
bool bo[101];
struct fun
{
int z;
int l;
int r;
int k;
}f[101];
int main(void)
{
freopen("hospital.in","r",stdin);
freopen("hospital.out","w",stdout);
scanf("%d",&a);
for (b=1;b<=a;b++)
{
scanf("%d%d%d",&f[b].k,&f[b].l,&f[b].r);
f[f[b].l].z=b;
f[f[b].r].z=b;
}
s=MAXN;
for (b=1;b<=a;b++)
{
n=0;
h=1;
t=0;
for (c=1;c<=a;c++) bo[c]=false;
for (c=1;c<=a;c++) y[c]=0;
x[t]=b;
y[0]=0;
while (h>t)
{
bo[x[t]]=true;
if ((f[x[t]].l!=0)&&(bo[f[x[t]].l]==false))
{
y[h]=y[t]+1;
n+=(f[f[x[t]].l].k)*y[h];
x[h]=f[x[t]].l;
h++;
}
if ((f[x[t]].r!=0)&&(bo[f[x[t]].r]==false))
{
y[h]=y[t]+1;
n+=(f[f[x[t]].r].k)*y[h];
x[h]=f[x[t]].r;
h++;
}
if ((f[x[t]].z!=0)&&(bo[f[x[t]].z]==false))
{
y[h]=y[t]+1;
n+=(f[f[x[t]].z].k)*y[h];
x[h]=f[x[t]].z;
h++;
}
t++;
}
if (n<s) s=n;
}
printf("%d",s);
fclose(stdin);
fclose(stdout);
return 0;
}