题解
这道题其实很简单,就是有一个需要的注意的点:同一颗树可能掉果多次,因此一棵树不要多次计算,只需要记录首次。
#include <iostream>
using namespace std;
#include <bits/stdc++.h>
#include<algorithm>
int dp[1005];
/*
5
4 10 0 9 0
4 10 -2 7 0
2 10 0
4 10 -3 5 0
4 10 -1 8 0
*/
int main()
{
int n;cin>>n;
long long int sum=0;int d=0;
for(int i=1;i<=n;i++)
{
int m;cin>>m;
int sub=0;cin>>sub;
for(int j=2;j<=m;j++)
{
int a;cin>>a;
if(a<=0)sub+=a;
else{
if(a<sub)
{
sub=a;
if(dp[i]==0)d++;//多次落果只统计第一次
dp[i]=1;
}
}
}
sum+=sub;
}
int lian=0;
for(int i=1;i<=n;i++)
{
int le=i-1,ri=i+1;
if(dp[i]==1)
{
if(i-1==0)le=n;
if(i+1>n)ri=1;
if(dp[ri]!=0&&dp[le]!=0)lian++;
}
}
cout<<sum<<" "<<d<<" "<<lian;
return 0;
}