B - Princesses and Princes

Posted yishuda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B - Princesses and Princes相关的知识,希望对你有一定的参考价值。

 

题意:

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

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

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

代码:

  

#include <iostream>
#include <cstdio>
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"<<endl;
                for (int j=1; j<=n; j++) {
                    if (!b[j]) {//这里匹配王子成功,直接输出即可。
                        cout<<i<<" "<<j<<endl;
                        goto here;
                    }
                }
            }
        }
        cout<<"OPTIMAL"<<endl;//n个公主成功找到,输出最佳。
    here: for (int i=1; i<=n;i++){a[i]=0;b[i]=0;c[i]=0;}//初始化
    }
}

 注意:

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

以上是关于B - Princesses and Princes的主要内容,如果未能解决你的问题,请参考以下文章

2019 ACM ICPC 南京站 H. Prince and Princess

Prince and Princess

UVA - 10635 —— Prince and Princess

线型DPLCISUVA_10635 Prince and Princess

Prince and Princess HDU - 4685(匹配 + 强连通)

UVa 10635 - Prince and Princess