B - Princesses and Princes


题意:

  题目bala bala一大堆废话,总的意思就是,有n个公主,n个王子,让你去给每一位公主匹配王子。其中每位公主都有心目中的王子,在这个基础上进行匹配。

如果这样就可以让n个公主找到自己的王子,那么就输出“OPTIMAL”,否则输出任意一个 没有找到王子的公主 以及其能够匹配的王子。

  ps:一位公主只能匹配一位王子。 

代码:

#include 
#include 
const int maxn=1e5+10;
using namespace std;
int a[maxn],b[maxn],c[maxn],t,n;
//a 数组是判断公主是否有对象  b数组是判断王子是否有对象 c数组是存放公主意愿
int main(){
    cin>>t;
    while (t--) {
        cin>>n;
        //下面对公主意愿进行匹配
        for (int i=1; i<=n; i++) {
            int x;cin>>x;
            for (int j=1; j<=x; j++) cin>>c[j];
            for (int j=1; j<=x; j++){
                if (!b[c[j]]) {
                    //如果这个c[j]号的王子没有对象,就让他和a[i]号公主匹配。
                    b[c[j]]=1;a[i]=1;
                    break;
                }
            }
        }
        
        //下面检查是否n个公主都成功匹配
        for (int i=1; i<=n; i++) {
            if (!a[i]) {//如果a[i]公主没有对象,就去匹配没有对象的王子。
                cout<<"IMPROVE"<

 注意:

每次初始化的时候,对n进行初始化就可以了,我试了试 每次对1e5的范围初始化是会超时的~~