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
        }
    }
}

posted @ 2020-06-14 16:41  SyrupWRLD  阅读(221)  评论(0)    收藏  举报