题目内容:

集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里。比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸。

本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否能装在同一只箱子里。

输入格式:

输入第一行给出两个正整数:N (≤104) 是成对的不相容物品的对数;M (≤100) 是集装箱货品清单的单数。

随后数据分两大块给出。第一块有 N 行,每行给出一对不相容的物品。第二块有 M 行,每行给出一箱货物的清单,格式如下:

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

其中 K (≤1000) 是物品件数,G[i] 是物品的编号。简单起见,每件物品用一个 5 位数的编号代表。两个数字之间用空格分隔。

输出格式:

对每箱货物清单,判断是否可以安全运输。如果没有不相容物品,则在一行中输出 Yes,否则输出 No

输入样例:

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

结尾无空行

输出样例:

No
Yes
Yes

结尾无空行

Java代码实现(未AC,最后2个测试点超时):

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Main {// 1、保存不相容的物品,key是物品,list是与key不相容的物品列表private Map<String, List<String>> incompatibleItems;public Main() {// 2、输入流Reader in = new InputStreamReader(System.in);BufferedReader input = new BufferedReader(in);// 3、获取物品对数和清单数量String[] arr = nextLine(input);int logarithmofGoods = Integer.parseInt(arr[0]);int numberofListings = Integer.parseInt(arr[1]);// 4、创建一个保存不相容物品的哈希映射incompatibleItems = new HashMap<String, List<String>>();// 5、输入所有不相容物品,生成不相容物品映射incompatibleItemsfor (int i = 0; i < logarithmofGoods; ++i) {arr = nextLine(input);addIncompatibleItems(arr[0], arr[1]);addIncompatibleItems(arr[1], arr[0]);}// 7、输入所有清单,检查它是否安全,并输出结果for (int i = 0; i < numberofListings; ++i) {arr = nextLine(input);arr = Arrays.copyOfRange(arr, 1, arr.length);// 1.去掉数组的第一个元素Arrays.sort(arr);// 2.将清单物品按照编号排序// 3.检查并输出是否安全if (checkItems(arr)) {System.out.println("Yes");} else {System.out.println("No");}}}// 4、读取一行字符串,转成字符串数组,返回数组private String[] nextLine(BufferedReader input) {String[] arr = new String[0];try {arr = input.readLine().split(" ");} catch (IOException e) {}return arr;}// 6、将incompatibleItem添加到与item不相容的物品列表private void addIncompatibleItems(  String item,String incompatibleItem) {List<String> list;if (incompatibleItems.containsKey(item)) {// 1.包含物品itemlist = incompatibleItems.get(item);// 2.获取item的不相容物品列表} else {// 3.不包含itemlist = new ArrayList<String>();// 4.创建新的列表}list.add(incompatibleItem);// 5.将incompatibleItem添加到列表中incompatibleItems.put(item, list);// 6.保存到映射中}// 8、检查清单是否安全private boolean checkItems(String[] itemList) {for (String item : itemList) {if (!incompatibleItems.containsKey(item)) {// 1.当前物品无不相容物品continue;// 2.跳过,检查清单的下一个物品}// 3.获取与item不相容的物品列表List<String> list = incompatibleItems.get(item);// 4.检查与item不相容的所有物品是否在清单中for (String inItem : list) {int index = Arrays.binarySearch(itemList, inItem);if (index >= 0) {// 5.当前不相容的物品在清单中return false;// 6.返回不安全}}}return true;// 7.安全}public static void main(String[] args) {new Main();}
}

C++代码实现(AC):

#include<iostream>
#include<vector>
#include<map>
using namespace std;
int main(){int n,k,t1,t2;cin>>n>>k;map<int, vector<int>> m;for(int i=0;i<n;i++){cin>>t1>>t2;m[t1].push_back(t2);m[t2].push_back(t1);}while(k--){int cnt,flag=0,a[100000]={0};cin>>cnt;vector<int> v(cnt);for(int i=0;i<cnt;i++){cin>>v[i];a[v[i]]=1;}for(int i=0;i<v.size();i++){for(int j=0;j <m[v[i]].size();j++){if(a[m[v[i]][j]]==1) flag=1;}}printf("%s\n",flag?"No":"Yes");}return 0;
}

Java 1090 危险品装箱相关推荐

  1. C++学习之路 | PTA乙级——1090 危险品装箱 (25 分)(精简)

    1090 危险品装箱 (25 分) 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你检 ...

  2. PAT(乙级)1090.危险品装箱(25)

    PAT 1090.危险品装箱(25) 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你 ...

  3. 【简便解法】1090 危险品装箱 (25分)_33行代码AC

    立志用最少的代码做最高效的表达 PAT乙级最优题解-->传送门 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题 ...

  4. 1090 危险品装箱 (25分)

    集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否 ...

  5. PAT 1090 危险品装箱(25 分)- 乙级

    集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否 ...

  6. 1090 危险品装箱 (25 分) mapp

    同一物品多对不相容,数组a直接寻找这批货物中是否有任一k物品的全部不相容物品j++(逐个检查),a[k][j]==1?以空间换时间,也可以用hash表 #include <iostream> ...

  7. 【PAT乙级】1090 危险品装箱 (25 分)

    题目地址 #include<cstdio> #include<iostream> #include<algorithm> #include<map> # ...

  8. 1090 危险品装箱 (25 分)

    解题思路: 首先我想到的是用一个足够大的动态二维数组来记录不相容的物品,行号代表该物品的编号,该列中存储与该物品不相容的其它物品 然后定义一个足够大的数组dir[100000],数组下标表示该物品的编 ...

  9. java的自动装箱和拆箱,Java中的自动装箱和拆箱是什么?

    当我们用任何语言编写程序时,大多数时候我们使用原始数据类型,.但是,在面向对象编程领域,有些情况下原始数据类型会出现不足,而Java就是其中之一.为了克服原始数据类型的缺点,我们 当我们用任何语言编写 ...

最新文章

  1. ELK 处理 Spring Boot 日志,有点强悍!
  2. mysql 主从相关
  3. fork source exec区别差异
  4. Resharper进阶一
  5. Python selenium chrome 环境配置
  6. 查看ELK集群的状态命令
  7. Linux服务器创建及维护记录
  8. ubuntu linux设置网关,ubuntu修改静态IP网关
  9. stn算子_C++学习(七)入门篇——C++算数运算符
  10. 在线工具:找到神器,助你轻松应对各种职场难题
  11. linux音频设备id,ubuntu下提取DSDT SSDT和声卡ID _ 黑苹果乐园
  12. protobuf如何使用Protogen工具生成CS代码详细教学篇
  13. freeradius在AP控制器设备中test-aaa 显示timeout的解决方案
  14. 分块详解(优雅的暴力)
  15. iPad Pro如何当外置显示器(win、mac)
  16. 批量将多个文件夹整理合并到一个文件夹中
  17. (加快设计)推荐一个SketchUp的3D模型库
  18. 滴水三期:day16.2-结构体数组赋值
  19. 0208中年发福,需要更加注意保持身材
  20. su - oracle和su oracle 的区别

热门文章

  1. 不作死就不会死——懒惰与不清晰的职业规划让我沦落至此
  2. SaltStack:Salt Pillar
  3. 关于KOF97的拳脚的总结
  4. Safari浏览器删除不了数据怎么办
  5. ndows xp +sp2 对蓝牙的支持
  6. [codevs]失恋28天题目系列
  7. Fedora 装系统后连接不上无线网络和蓝牙设备
  8. NC6X_开发_02_NC6X常用API
  9. echarts 饼状图制作 legend 在右边且带有自定义参数,title在图标中间!
  10. Linux内核中的内存管理(图例解析)