CF1437D Solution
题解
由题意得,每一个节点仅经过一条边可以到达的节点一定是递增的。因此可以将bfs序列分成若干个递增序列,然后模拟建树。
AC代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int a[N],len[N];
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
memset(len,0,sizeof(len));
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int pos=1,cnt=0,last=1,now=0,ans=0;
for(int i=2;i<=n;i++)
{
if(a[i]<a[i-1]) len[++pos]=1;
else len[pos]++;
}
for(int i=1;i<=pos;i++)
{
now++; cnt+=len[i];
if(now==last)
{
ans++; last=cnt;
cnt=0; now=0;
}
}
if(now) ans++;
printf("%d\n",ans);
}
return 0;
}