问题连接:https://odzkskevi.qnssl.com/a2ea37834edbbaa8afe720b6f12e7707?v=1534682801
题意:
给你一个树状天平,让你判断天平是否处于平衡状态,数据输入:wl,cl(左枝的重量和力臂),wr,cr(右枝的重量和力臂),wl=0时说明左枝存在孩子节点,wr=0时说明右枝存在孩子节点。
思路:
在递归函数中输入数据,采用先序遍历,逐层比较。每层wl*cl==wr*cr,否则不能保持平衡。
代码:
#define N 200
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int k[N],flag;
int dfs()
{
int wl,cl,wr,cr;
scanf("%d%d%d%d",&wl,&cl,&wr,&cr);
if(wl==0)wl=dfs();
if(wr==0)wr=dfs();
if(wl*cl!=wr*cr)flag=0;
return wl+wr;
}
int main()
{
int T;scanf("%d",&T);
while(T--)
{
flag=1;
dfs();
if(flag)printf("YES\n");
else printf("NO\n");
if(T)printf("\n");
}
return 0;
}