蓝桥杯试题J:郊外植树

试题J:郊外植树

在这里插入图片描述
样例
输入
6
1 1 2
1 4 2
1 7 2
4 1 2
4 4 2
4 7 2
输出
12

分析
把每棵树抽象成一个节点,我是先判断任意两颗树能不能种在一起(就是判断是否相离或相切),如果可以的话就连一条无向边,然后判断这个图中所有的完全子图中对应植树面积最大的那个。注意要判断下是不是存在只种一棵树面积最大的情况。

n=input()
n=int(n)
xx=[[0]for i in range(n)]
yy=[[0]for i in range(n)]
rr=[[0]for i in range(n)]
g=[[[0]for i in range(n)]for j in range(n)]
##
trace=[]
vis=[]
area=[[0]for i in range(n)]
##
key=[]
ans=0
def jud(x1,y1,r1,x2,y2,r2):
     dis=(y2-y1)**2+(x2-x1)**2
     sumR=(r1+r2)**2
     if dis>=sumR:
          return True
     return False
def check(road):
     for i in range(len(road)):
          for j in range(i+1,len(road)):
               
               if g[road[i]][road[j]]==[0]:
                    return False
     return True
def dfs(num):
     global ans
     global key
     if(num in vis):
          if(num in trace):

               trace_index=trace.index(num)
               for i in range(trace_index,len(trace)):
                    key.append(trace[i])
               if(check(key)):
                    tmp=0
                    for i in key:
                         tmp+=area[i]
                    ans=max(tmp,ans)
               key=[]
               return
          return
     vis.append(num)
     trace.append(num)
     for i in range(n):
          if(g[num][i]==1):
               dfs(i)
     trace.pop()
maxr=0
for i in range(n):
     x,y,r=input().split()
     x=int(x)
     y=int(y)
     r=int(r)
     xx[i]=x
     yy[i]=y
     rr[i]=r
     maxr=max(r,maxr)
     area[i]=r**2
for i in range(n):
     for j in range(i+1,n):
          if jud(xx[i],yy[i],rr[i],xx[j],yy[j],rr[j]):
               g[i][j]=1
               g[j][i]=1
               

for i in range(n):
     dfs(i)
if ans==0:
     print(maxr**2)
else:
     print(max(ans,maxr**2))


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值