关于#c++#的问题,如何解决?

题目描述
Vasya想要打开由m个灯泡组成的圣诞灯。 最初,所有灯泡都关闭。 有n个按钮,每个按钮都连接到一组灯泡。 Vasya可以按以下任何一个按钮。 按下按钮时,它会打开所有已连接的灯泡。 Vasya可以点亮所有灯泡吗?

如果Vasya按下该按钮使得与其连接的某些灯泡已经打开,则它们不会更改其状态,即保持打开状态。

输入格式
输入的第一行包含整数n和m(1≤n,m≤100)—分别是按钮数和灯泡数。

接下来的n行中的每一行都包含xi(0≤xi≤m)表示通过第i个按钮连接的灯泡数,后面为xi个数,表示这些灯泡的序号。

输出格式
如果可以打开所有m个灯泡,则打印“YES”,否则打印“NO”。

输入样例#1
3 4
2 1 4
3 1 3 1
1 2
输出样例#1
YES

#include <iostream>
using namespace std;
int main()
{
    int n, m;
    cin >> n >> m;
    int b[101] = { 0 };
    for (int i = 0; i < n; i++)
    {
        int p, q;
        cin >> p;
        for (int j = 0; j < p; j++) 
        {
            cin >> q;
            b[q - 1] = 1;
        }
    }
    int flag = 1;
    for (int i = 0; i < m; i++)
    {
        if (b[i] == 0) 
        { 
            flag = 0; 
            break;
        }
    }
    if (flag)
        cout << "YES";
    else
        cout << "NO";
    return 0;
}

img

给个思路:

  • 定义一个 bool类型的数组 bulbs,数组长度就是 灯泡的个数, 默认里面的值都是false;
  • 然后 遍历按钮的连接的灯泡序号 x,设置 bulbs[x - 1] = true;
  • 最后判断 bulbs 中是否都是 ture,如果是 则 输出 YES; 否则 输出 NO