6.14 VJ B - Princesses and Princes
#include<bits/stdc++.h>
#define ll long long
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
/*
用一个数组标记王子,0表示单身,1表示已经配对
*/
int main()
{
speed_up;
int t;
int m[100005]={0};//数组初始化为0
cin>>t;
while(t--)
{
int n,v,f2=0;//f2判断是否有未配对的公主
cin>>n;
for(int i=0; i<n; i++)
{
int nn,a,f=0;
cin>>nn;
for(int j=0; j<nn; j++)
{
cin>>a;
if(f==0&&m[a]==0)
{
m[a]=1;
f=1;//f用来标记公主是否能找到合适的王子
}
}
if(f==0)
{
f2=1;
v=i+1;//v值记录第几个公主没有能匹配的王子
}
}
if(f2==0)
{
cout<<"OPTIMAL"<<endl;
}
else
{
cout<<"IMPROVE"<<endl;
cout<<v<<" ";
for(int i=1; i<=n; i++)
{
if(m[i]==0)//输出第一个单身的王子下标
{
cout<<i<<endl;
break;
}
}
}
for(int i=1;i<=n;i++)
{
m[i]=0;//还原数组为0
}
}
}