UVA_839

    这个题目虽然是树的结构,但我们可以不必把树的结构建立起来,因为后面可以不必再遍历树了,读入数据的过程本身就是一个遍历树的过程,在这个过程中可以把每个节点的权值计算出来,之后就只需要扫描一遍所有节点,看节点两端是否力矩平衡即可。

#include<stdio.h>
#include<string.h>
#define MAXD 1000010
int size, wl[MAXD], wr[MAXD], dl[MAXD], dr[MAXD], d[MAXD], ok;
int dfs()
{
int k;
++ size;
k = size;
scanf("%d%d%d%d", &wl[k], &dl[k], &wr[k], &dr[k]);
if(wl[k] == 0)
wl[k] = dfs();
if(wr[k] == 0)
wr[k] = dfs();
if(wl[k] * dl[k] != wr[k] * dr[k])
ok = 0;
return wl[k] + wr[k];
}
void solve()
{
int i;
size = 0;
ok = 1;
dfs();
if(ok)
printf("YES\n");
else
printf("NO\n");
}
int main()
{
int t, tt;
scanf("%d", &t);
for(tt = 0; tt < t; tt ++)
{
if(tt)
printf("\n");
solve();
}
return 0;
}



posted on 2011-12-29 19:14  Staginner  阅读(329)  评论(0编辑  收藏  举报