【例题 6-21 UVA - 506】System Dependencies
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
记录每个物品它的依赖有哪些,以及它被哪些东西依赖就可以了。
显式安装的东西不能被隐式删除删掉(就是remove item,然后删除item的依赖的过程叫隐式删除,而删除item本身叫显式删除);
而只能被显式删除。
隐式安装的依赖则可以被显式或隐式删除都行。
(显示安装指的是 install item,安装item本身,而安装item的依赖,都称为是隐式的安装)
写个安装和删除的递归函数就好。
样例的答案有误。
remove browser那里应该是先remove tcpip 后remove html.
【代码】
/*
1.Shoud it use long long ?
2.Have you ever test several sample(at least therr) yourself?
3.Can you promise that the solution is right? At least,the main ideal
4.use the puts("") or putchar() or printf and such things?
5.init the used array or any value?
6.use error MAX_VALUE?
*/
#include <bits/stdc++.h>
using namespace std;
string s;
map <int,vector <int> > yilai,beiyilai;
map <int,int> status;
map <string,int> dic;
map <int,string> dic2;
vector <int> installed;
string ope;
int tot = 0;
void pd(string temp){
if (dic[temp]==0) {
dic[temp] = ++tot;
dic2[tot] = temp;
}
}
void ins(int id,bool highest){
if (status[id]==0){
if (yilai.find(id)!=yilai.end()){
vector <int> v = yilai[id];
int len = v.size();
for (int i = 0;i < len;i++){
int x = v[i];
ins(x,0);
}
}
cout << " Installing "<<dic2[id] << endl;
installed.push_back(id);
status[id] = (highest?1:2);
}
}
bool need(int x){
if (beiyilai.find(x)!=beiyilai.end()){
vector <int> v = beiyilai[x];
int len = v.size();
for (int i = 0;i < len;i++){
int x = v[i];
if (status[x]) return true;
}
}
return false;
}
void dele(int id,bool highest){
if ( !need(id) && (highest || status[id]==2)){
status[id] = 0;
cout << " Removing " << dic2[id] << endl;
installed.erase(remove(installed.begin(),installed.end(),id),installed.end());
if (yilai.find(id)!=yilai.end()){
vector <int> v = yilai[id];
int len = v.size();
for (int i = 0;i < len;i++){
int x = v[i];
if (status[x]) dele(x,0);
}
}
}
}
int main(){
#ifdef LOCAL_DEFINE
freopen("F:\\c++source\\rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
while (getline(cin,s)){
yilai.clear(),beiyilai.clear(),
status.clear(),dic.clear();dic2.clear();
installed.clear();
while (s!="END"){
cout << s << endl;
stringstream ss(s);
ss >> ope;
if (ope=="INSTALL"){
string x;
ss >> x;
pd(x);
int y = dic[x];
if (status[y]!=0)
cout <<" "<<x<<" is already installed."<<endl;
else
ins(y,1);
}else if (ope=="REMOVE"){
string x;
ss >> x;
pd(x);
int y = dic[x];
if (status[y]==0)
cout <<" "<<x<<" is not installed."<<endl;
else if (need(y))
cout <<" "<<x<<" is still needed."<<endl;
else{
dele(y,1);
}
}else if (ope=="LIST"){
for (int x:installed){
cout <<" "<<dic2[x]<<endl;
}
}else{
//depend
string x,y;int xx,yy;
ss >> x;
pd(x);xx = dic[x];
while (ss>>y){
pd(y);yy = dic[y];
yilai[xx].push_back(yy);
beiyilai[yy].push_back(xx);
}
}
getline(cin,s);
}
cout << s << endl;
}
return 0;
}
【例题 6-21 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(模拟 烂题)
https://vjudge.net/problem/UVA-506 题目是给出了五种指令,DEPEND.INSTALL.REMOVE.LIST.END,操作的格式及功能如下: DEPEND item ...
- Uva - 506 - System Dependencies
模拟题,注意显示安装和隐式安装,显示安装的必须显示显示删除.把名字转化为整数维护.其他注意都注释了.输入稍微多一下,题目不是很麻烦. AC代码: #include <iostream> # ...
- UVa 506 System Dependencies (细节问题)
题意:输入几种指令,让你进行模拟操作,指令如下: DEPEND item1 item2 (item3 ...) 安装item1需要先安装item2(.item3……) INSTALL item1 安装 ...
- Learning ROS: Managing System dependencies
Download and install the system dependencies for turtlesim: roscd turtlesim cat package.xml rosdep i ...
- (高精度运算4.7.21)UVA 10106 Product(大数乘法)
package com.njupt.acm; import java.math.BigInteger; import java.util.Scanner; public class UVA_10106 ...
- 2016.6.21 -Dmaven.multiModuleProjectDirectory system propery is not set,Check $M2_HOME environment variable and mvn script match.
eclipse中使用maven插件的时候,运行run as maven build的时候报错: -Dmaven.multiModuleProjectDirectory system propery i ...
- Uva 11077 Find the Permutations [置换群 DP]
题意: 给定$n$和$k$,问有多少排列交换$k$次能变成升序 $n \le 21$ $uva$貌似挂掉了$vjudge$上一直排队 从某个排列到$1,2,...,n$和从$1,2,...,n$到某个 ...
- Java 常用对象-System类
2017-11-02 21:41:06 System类:System 类包含一些有用的类字段和方法.它不能被实例化. *常用方法 public static void gc() 运行垃圾回收器. 调用 ...
随机推荐
- UTC时间 GMT时间 本地时间 北京时间 时区 夏令时简要说明
1.UTC时间 与 GMT时间 整个地球分为二十四时区,每个时区都有自己的本地时间.为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated). ...
- 如何在VMware中创建虚拟机
今天给大家分享如何在VMware中创建虚拟机,具体的教程如下.在这里小编提前下载了Ubuntu14.04桌面系统,为后面在虚拟机中安装Ubuntu14.04桌面系统做准备. 1.从官网上或者直接百度上 ...
- 网络地图WebMap介绍
WebMap是从ArcGIS Online或者ArcGIS for Portal item上获取显示到用户的界面中. 需要的是地图的ID. 创建一个新的网络地图需要设置ID号,然后再用地图底图MapV ...
- Linux登陆类型-Linux中如何临时配置IP
Linux登录: 本地登录,直接在Linux主机上接上键盘显示器,然后输入用户名密码登录 远程登录,通过网络进行登录(需要IP 账户名 密码) windows中远程登录软件有 xshell.putty ...
- UINavigationController导航栏按钮设置
UINavigationController常见属性 1.一般情况下,导航栏上面显示什么内容,由当前栈顶控制器的navigationItem属性决定 * navigationItem.title : ...
- 洛谷 P3486 [POI2009]KON-Ticket Inspector
P3486 [POI2009]KON-Ticket Inspector 题目描述 Byteasar works as a ticket inspector in a Byteotian Nationa ...
- android反编译odex文件
关于android的反编译工具,相信大家并不陌生 如APK-TOOL,dex2jar APK-TOOL 用于反编译出布局文件 下载地址http://code.google.com/p/android- ...
- POJ 3049 DFS
思路:暴搜 //By SiriusRen #include <cstdio> #include <iostream> #include <algorithm> us ...
- Think Pad笔记本分区解决思路及方法
Think pad笔记本分区解决思路及方法 近日好友拿着新买的Thinkpad X300过来找我,说这个笔记本只有一个分区,所有的东西不得放在C盘,希望再多分出几个分区.抱怨原先在wind ...
- 多重背包模板 51Nod 1086
有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi ...