【PAT甲级 - C++题解】1149 Dangerous Goods Packaging

简介: 【PAT甲级 - C++题解】1149 Dangerous Goods Packaging

1149 Dangerous Goods Packaging

When shipping goods with containers, we have to be careful not to pack some incompatible goods into the same container, or we might get ourselves in serious trouble. For example, oxidizing agent (氧化剂) must not be packed with flammable liquid (易燃液体), or it can cause explosion.


Now you are given a long list of incompatible goods, and several lists of goods to be shipped. You are supposed to tell if all the goods in a list can be packed into the same container.


Input Specification:

Each input file contains one test case. For each case, the first line gives two positive integers: N (≤104), the number of pairs of incompatible goods, and M (≤100), the number of lists of goods to be shipped.


Then two blocks follow. The first block contains N pairs of incompatible goods, each pair occupies a line; and the second one contains M lists of goods to be shipped, each list occupies a line in the following format:

K G[1] G[2] ... G[K]

where K (≤1,000) is the number of goods and G[i]'s are the IDs of the goods. To make it simple, each good is represented by a 5-digit ID number. All the numbers in a line are separated by spaces.


Output Specification:

For each shipping list, print in a line Yes if there are no incompatible goods in the list, or No if not.

Sample Input:

6 3
20001 20002
20003 20004
20005 20006
20003 20001
20005 20004
20004 20006
4 00001 20004 00002 20003
5 98823 20002 20003 20006 10010
3 12345 67890 23333


Sample Output:

No
Yes
Yes


题意

题目首先给定哪些物品不相容,然后再判断给定的箱子中,每个物品之间是否都是相容的。

思路

具体思路如下:


1.先将将给定不相容的物品分别放入数组 a 和数组 b 。

2.将需要判断的箱子中的物品放入 unordered_set 容器中,方便后续查询。

3.从数组 a 和数组 b 中遍历每一对不相容的物品,如果发现有一对物品同时存在容器中,则该箱子不满足要求,反之该箱子是安全的。

4.最后,输出查询的结果。


代码

#include<bits/stdc++.h>
using namespace std;
const int N = 10010;
int n, m, k;
int a[N], b[N];
int main()
{
    cin >> n >> m;
    for (int i = 0; i < n; i++)    cin >> a[i] >> b[i];
    while (m--)
    {
        //将该箱子中物品放入容器方便后续查询
        cin >> k;
        unordered_set<int> s;
        for (int i = 0; i < k; i++)
        {
            int x;
            cin >> x;
            s.insert(x);
        }
        //判断该箱子中是否存在一对不容物
        bool success = true;
        for (int i = 0; i < n; i++)
            if (s.count(a[i]) && s.count(b[i]))
            {
                success = false;
                break;
            }
        //输出查询答案
        if (success) puts("Yes");
        else    puts("No");
    }
    return 0;
}
目录
相关文章
|
C++
【PAT甲级 - C++题解】1040 Longest Symmetric String
【PAT甲级 - C++题解】1040 Longest Symmetric String
66 0
|
算法 C++
【PAT甲级 - C++题解】1044 Shopping in Mars
【PAT甲级 - C++题解】1044 Shopping in Mars
82 0
|
C++
【PAT甲级 - C++题解】1117 Eddington Number
【PAT甲级 - C++题解】1117 Eddington Number
77 0
|
存储 C++ 容器
【PAT甲级 - C++题解】1057 Stack
【PAT甲级 - C++题解】1057 Stack
76 0
|
存储 C++
【PAT甲级 - C++题解】1055 The World‘s Richest
【PAT甲级 - C++题解】1055 The World‘s Richest
78 0
|
C++
【PAT甲级 - C++题解】1051 Pop Sequence
【PAT甲级 - C++题解】1051 Pop Sequence
79 0
|
人工智能 BI C++
【PAT甲级 - C++题解】1148 Werewolf - Simple Version
【PAT甲级 - C++题解】1148 Werewolf - Simple Version
135 0
|
存储 定位技术 C++
【PAT甲级 - C++题解】1091 Acute Stroke
【PAT甲级 - C++题解】1091 Acute Stroke
58 0
|
存储 人工智能 C++
【PAT甲级 - C++题解】1085 Perfect Sequence
【PAT甲级 - C++题解】1085 Perfect Sequence
71 0
|
C++
【PAT甲级 - C++题解】1046 Shortest Distance
【PAT甲级 - C++题解】1046 Shortest Distance
65 0