比赛 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; 
}