#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
pair<int,int>pq[N];
int main()
{
int t,n;
cin>>t;
while(t--)
{
int re=0;
int z,zl,zr,left,right,L,R;
z=zl=zr=0;//标记鸡的周围三点是否有火
left=right=L=R=0;//是否左、右有火,是否左边堵上 0表示无
cin>>n;
for(int i=1;i<=n;i++) cin>>pq[i].second>>pq[i].first;
sort(pq+1,pq+n+1);
for(int i=1;i<=n;i++)//检测鸡的周围三个有没有火
if(pq[i].first==0) z=1;
else if(pq[i].first==-1&&pq[i].second==1) zl=1;
else if(pq[i].first==1&&pq[i].second==1) zr=1;
for(int i=1;i<=n;i++)//检测左边是否有火以及是否被火堵上
{
if(pq[i].first>=0) break;
left=1;
if((pq[i].first==pq[i+1].first&&i+1<=n)||(i+1<=n&&pq[i].first==pq[i+1].first-1&&pq[i].second!=pq[i+1].second)) {L=1;break;}
}
for(int i=n;i>=1;i--)
{
if(pq[i].first<=0) break;
right=1;
if((i-1>=1&&pq[i].first==pq[i-1].first)||(i-1>=1&&pq[i].first==pq[i-1].first+1&&pq[i].second!=pq[i-1].second)) {R=1;break;}
}
if(z)
{
if(!L) re++;
if(!R) re++;
}
else
{
if(!left) {re+=2;z=1;}
else if(left&&!L&&!zl) re++;
else if(left&&!L&&zl) {re++;z=1;}
if(!right)
{
if(z) re++;
else re+=2;
}
else
{
if(!R) re++;
if(zr&&z) re--;
}
}
printf("%d\n",re);
}
}
全部评论
(0) 回帖