每个人与排名进行匹配,
用一个结构体来存,满足情况i的排名范围,不要用二维数组。。。
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
int mark[100001];
int set[100001];
int n,a[61];
struct node
{
int x,y;
}A[61];
int dfs(int k)
{
int i;
for(i=A[k].x;i<=A[k].y;i++)
{
if(mark[i]==0)
{
mark[i]=1;
if(set[i]==-1||dfs(set[i]))
{
set[i]=k;
a[k]=1;
return 1;
}
}
}
return 0;
}
int main()
{
int T;
int i;
int ans;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d%d",&A[i].x,&A[i].y);
ans=0;
memset(a,0,sizeof(a));
memset(set,-1,sizeof(set));
for(i=n;i>=1;i--)
{
memset(mark,0,sizeof(mark));
if(dfs(i))
ans++;
}
printf("%d\n",ans);
for(i=1;i<=n;i++)
if(a[i]){printf("%d",i);break;}
for(i++;i<=n;i++)
if(a[i])printf(" %d",i);
printf("\n");
}
return 0;
}