传送门:http://acm.nyist.net/JudgeOnline/problem.php?pid=1278
#include<bits/stdc++.h>
using namespace std;
struct node
{
node *l,*r;
int data,num;
};
int a[55][20];
node *root,*q;
node *node_t(int x,int num)
{
q=(struct node *)malloc(sizeof(node));
q->data=x; q->num=num;
q->l=NULL; q->r=NULL;
return q;
}
void Create(node *r,int x)
{
int num=r->num;
if(x>=r->data)
{
if(r->r==NULL)
{
r->r=node_t(x,num*2+1);
return;
}
else Create(r->r,x);
}
else
{
if(r->l==NULL)
{
r->l=node_t(x,num*2);
return;
}
else Create(r->l,x);
}
}
int n,m,cnt;
void dfs(node *r,int i)
{
if(r!=NULL)
{
a[i][cnt++]=r->num;
dfs(r->l,i);
dfs(r->r,i);
}
}
int main()
{
int t,tt=0,x,y,z;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&x);
root=node_t(x,1);
for(int j=0;j<m-1;j++)
scanf("%d",&x),Create(root,x);
cnt=0;
dfs(root,i);
}
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
{
cnt=0;
for(int k=0;k<m;k++)
if(a[i][k]!=0&&a[j][k]!=0&&a[i][k]==a[j][k])cnt++;
else break;
if(cnt==m) a[j][0]=0;
}
int sum=0;
for(int i=0;i<n;i++)
if(a[i][0]==0) sum++;
printf("%d\n",n-sum);
}
return 0;
}