2-1 聚餐 (分数 25)

作者 nameless
单位 郑州轻工业大学
有一个班有 n 个人, 从 1∼_n_ 编号。这学期班里一共举行了 m 次聚餐,第_i_ 次聚餐有 ki 个人参加。如果两名同学参加过同一场聚餐,那么我们就说这两个同学是熟悉的。现在给你_q_次询问,每个询问包含两个同学的编号_a_,b,问同学_a_和同学_b_是否熟悉。

输入格式

第一行三个整数_n_,m,q(1<=n,m,q<=100)。分别代表同学人数,聚餐次数和询问次数。
接下来_m_行,每行第一个数 ki 代表这次聚餐的人数,后面是 ki 个同学的编号。
接下来 _q_行,每行两个整数 _x_和 _y_代表两个同学的编号。(_x_=y)

输出格式

输出包含 _q_行,每行对应一个询问的答案,如果同学_a_和同学_b_是熟悉的,输出 YES;否则输出 NO 。

样例输入

3 2 2 
2 1 2 
2 1 3 
1 2
2 3

样例输出

YES
NO

提示

样例中,共有3名学生,2场聚餐,2次询问
第一次聚餐有2名同学参加,分别是同学1和同学2
第二次聚餐有2名同学参加,分别是同学2和同学3
第一次询问,同学1和同学2都参加过第一场聚餐,所以输出YES
第二次询问,同学2和同学3没有参加过同一场聚餐,所以输出NO
#include<iostream>
using namespace std;
const int N = 101;
int a[N][N];//初始化0
int b[N];
int main()
{
    int n, m, q;
    cin >> n >> m >> q;//读入同学人数,聚餐次数和询问次数。
    while (m--)
        {
     int k;
     cin >> k;
     for (int i = 1; i <= k; i++)      
     cin >> b[i]; //读入几号同学
     for (int i = 1; i <= k; i++)
       for (int j = i + 1; j <= k; j++)
                    {
             //这里是将这几个人分别赋值
             // 1例如读入同学1 2这两个人,这里b[1]=1,b[2]=2,
             // 依次读入 a[1][2] a[2]a[1]
            //2例如它读入的同学是3 4 5这三个人,b[1]=3,b[2]=4,b[3]=5
            //依次让a[3][4] a[4][3] a[3]a[5] a[5][3] a[4][5] a[5][4]为1
                        a[b[i]][b[j]] = 1;
                        a[b[j]][b[i]] = 1;
                    }
        }
    while (q--)
        {
            int x, y;
            cin >> x >> y;
            if (a[x][y])
                cout << "YES" << endl;
            else
                cout << "NO" << endl;
        }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值