作者 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;
}