Uva - 506 - System Dependencies
模拟题,注意显示安装和隐式安装,显示安装的必须显示显示删除。把名字转化为整数维护。其他注意都注释了。输入稍微多一下,题目不是很麻烦。
AC代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cctype> #include <cstring> #include <string> #include <sstream> #include <vector> #include <set> #include <map> #include <algorithm> #include <stack> #include <queue> #include <bitset> #include <cassert> using namespace std; const int maxn = 10000; int cnt = 0; map<string, int> name2id; // 把名字转化为整数,方便处理 string name[maxn]; vector<int> depend[maxn]; // 组件x所以来的组件列表 vector<int> depended[maxn]; // 依赖于x的组件列表 int status[maxn]; // 0表示组件x未安装,1表示显示安装,2表示隐式安装 vector<int> installed; // 存放安装过的组件,安装过的就不要再安装了 // 把名字转化为整数维护 int ID(const string& item) { if (!name2id.count(item)) { name[++cnt] = item; name2id[item] = cnt; } return name2id[item]; } // 是否有组件依赖于item bool needed(int item) { for (int i = 0; i < depended[item].size(); i++) { if (status[depended[item][i]]) { return true; } } return false; } // 安装item,如果有依赖项,递归的继续安装 void install(int item, bool toplevel) { if (!status[item]) { for (int i = 0; i < depend[item].size(); i++) { install(depend[item][i], false); } cout << " Installing " << name[item] << endl; status[item] = toplevel ? 1 : 2; installed.push_back(item); } } // 判断是否能删除,如果能,删除之后递归的删除其他所依赖的组件 void remove(int item, bool toplevel) { if ((toplevel || status[item] == 2) && !needed(item)) { status[item] = 0; installed.erase(remove(installed.begin(), installed.end(), item), installed.end()); cout << " Removing " << name[item] << endl; for (int i = 0; i < depend[item].size(); i++) { remove(depend[item][i], false); } } } // 按照安装顺序输出 void list() { for (int i = 0; i < installed.size(); i++) { cout << " " << name[installed[i]] << endl; } } int main() { ios::sync_with_stdio(false); string line, cmd; memset(status, 0, sizeof(status)); while (getline(cin, line)) { cout << line << endl; stringstream ss(line); ss >> cmd; if (cmd[0] == 'E') { break; } string item1, item2; if (cmd[0] == 'L') { list(); } else { ss >> item1; int i1 = ID(item1); if (cmd[0] == 'D') { while (ss >> item2) { int i2 = ID(item2); depend[i1].push_back(i2); depended[i2].push_back(i1); } } else if (cmd[0] == 'I') { if (status[i1]) { cout << " " << item1 << " is already installed.\n"; } else { install(i1, true); } } else { if (!status[i1]) { cout << " " << item1 << " is not installed.\n"; } else if (needed(i1)) { cout << " " << item1 << " is still needed.\n"; } else { remove(i1, true); } } } } return 0; }
Uva - 506 - System Dependencies的更多相关文章
- 【STL+模拟】UVa 506 - System Dependencies
System Dependencies Components of computer systems often have dependencies--other components that m ...
- UVa 506 System Dependencies (细节问题)
题意:输入几种指令,让你进行模拟操作,指令如下: DEPEND item1 item2 (item3 ...) 安装item1需要先安装item2(.item3……) INSTALL item1 安装 ...
- UVA 506 System Dependencies(模拟 烂题)
https://vjudge.net/problem/UVA-506 题目是给出了五种指令,DEPEND.INSTALL.REMOVE.LIST.END,操作的格式及功能如下: DEPEND item ...
- Learning ROS: Managing System dependencies
Download and install the system dependencies for turtlesim: roscd turtlesim cat package.xml rosdep i ...
- 【例题 6-21 UVA - 506】System Dependencies
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 记录每个物品它的依赖有哪些,以及它被哪些东西依赖就可以了. 显式安装的东西不能被隐式删除删掉(就是remove item,然后删除i ...
- C C++ TDD单元测试非常好的书
http://product.china-pub.com/199003 测试驱动的嵌入式C语言开发 Test Driven Development for Embedded C <测试驱动的嵌入 ...
- Debian8.3.0下安装Odoo8.0步骤
Debian8.3.0下安装Odoo8.0的方法 假设你已经安装好了Debian 系统,使用root帐号执行如下命令 # apt-get update && apt-get upgra ...
- Classes
Class Organization Following the standard Java convention, a class should begin with a list of varia ...
- maven-dependency-plugin插件的使用
maven-dependency-plugin插件的使用 maven-dependency-plugin是 处理与依赖相关的插件.它有很多可用的goal,大部分是和依赖构建.分析和解决相关的goa ...
随机推荐
- java客户端Jedis操作Redis Sentinel 连接池
pom配置: <dependency> <groupId>org.springframework.data</groupId> <artifactId> ...
- 手把手教你全家桶之React(一)
前言 最近项目用到react,其实前年我就开始接触react,时光匆匆,一直没有时间整理下来(太懒啦)!如今再次用到,称工作间隙,对全家桶做一次总结,项目源码地址.废话不多说,上码. 创建一个文件目录 ...
- AJAX 向后台发送带 List 集合的对象
现有基类: public class School { int name; int address; List<Student> students = new ArrayList<S ...
- JFinal中使用QuartzPlugin报ClassCastException解决方法
JDK1.8中泛型反射修改对旧版本的影响 本文地址:http://blog.csdn.net/sushengmiyan 本文作者:苏生米沿 问题复现环境: JDK1.8 JFinal1.9 quart ...
- 剑指Offer——知识点储备-网络基础
剑指Offer--知识点储备-网络基础 计算机网络 http和https的区别 (1)http是http协议运行在tcp之上,所传输的内容都是明文,客户端和服务器端都无法验证对方的身份. (2)htt ...
- Servlet - Listener、Filter、Decorator
Servlet 标签 : Java与Web Listener-监听器 Listener为在Java Web中进行事件驱动编程提供了一整套事件类和监听器接口.Listener监听的事件源分为Servle ...
- EBS多组织结构
1. 业务组: 它代表组织结构的最高层次, 它分离了人力资源的信息. 例如, 当你查询人员时, 它会列出所有分配给相应业务组的成员, 而你自己所属于的组织只不过是业务组的一份子. 这样说可能造成一种误 ...
- activiti 动态配置 activiti 监听引擎启动和初始化(高级源码篇)
1.1.1. 前言 用户故事:现在有这样一个需求,第一个需求:公司的开发环境,测试环境以及线上环境,我们使用的数据库是不一样的,我们必须能够任意的切换数据库进行测试和发布,对数据库连接字符串我们需要加 ...
- 集合框架之List接口
有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素. 与 set 不同,列表 ...
- TortoiseSVN文件夹图标不显示
伴随着十二月的脚步,小编带领的市委组织部项目有条不紊的进行着,在最近的项目中遇到一个问题TortoiseSVN文件夹的图标不显示,为什么小编已经安装好TortoiseSVN了,发现文件夹的图标还是系统 ...