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
UVA - 10635 —— Prince and Princess
线型DPLCISUVA_10635 Prince and Princess