【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

记录每个物品它的依赖有哪些,以及它被哪些东西依赖就可以了。
显式安装的东西不能被隐式删除删掉(就是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的更多相关文章

  1. 【STL+模拟】UVa 506 - System Dependencies

    System Dependencies  Components of computer systems often have dependencies--other components that m ...

  2. UVA 506 System Dependencies(模拟 烂题)

    https://vjudge.net/problem/UVA-506 题目是给出了五种指令,DEPEND.INSTALL.REMOVE.LIST.END,操作的格式及功能如下: DEPEND item ...

  3. Uva - 506 - System Dependencies

    模拟题,注意显示安装和隐式安装,显示安装的必须显示显示删除.把名字转化为整数维护.其他注意都注释了.输入稍微多一下,题目不是很麻烦. AC代码: #include <iostream> # ...

  4. UVa 506 System Dependencies (细节问题)

    题意:输入几种指令,让你进行模拟操作,指令如下: DEPEND item1 item2 (item3 ...) 安装item1需要先安装item2(.item3……) INSTALL item1 安装 ...

  5. Learning ROS: Managing System dependencies

    Download and install the system dependencies for turtlesim: roscd turtlesim cat package.xml rosdep i ...

  6. (高精度运算4.7.21)UVA 10106 Product(大数乘法)

    package com.njupt.acm; import java.math.BigInteger; import java.util.Scanner; public class UVA_10106 ...

  7. 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 ...

  8. Uva 11077 Find the Permutations [置换群 DP]

    题意: 给定$n$和$k$,问有多少排列交换$k$次能变成升序 $n \le 21$ $uva$貌似挂掉了$vjudge$上一直排队 从某个排列到$1,2,...,n$和从$1,2,...,n$到某个 ...

  9. Java 常用对象-System类

    2017-11-02 21:41:06 System类:System 类包含一些有用的类字段和方法.它不能被实例化. *常用方法 public static void gc() 运行垃圾回收器. 调用 ...

随机推荐

  1. linux下支持托盘的邮件客户端Sylpheed

    在网上搜索了很多客户端想支持系统托盘,发现一个很不错的邮件客户端Sylpheed.设置方式和foxmail很像,最为重要的是支持系统托盘,很方便,默认没有开启,简单设置下:配置->通用首选项-& ...

  2. 封装TensorFlow神经网络

    为了参加今年的软件杯设计大赛,这几个月学习了很多新知识.现在大赛的第二轮作品优化已经提交,开始对这四个月所学知识做一些总结与记录. 用TensorFlow搭建神经网络.TensorFlow将神经网络的 ...

  3. IT运维分析

    http://www.infoq.com/cn/presentations/case-of-it-operation-analysis-and-log-search-analysis-engine?u ...

  4. class-dump 和 iOSOpenDev 的使用

    class-dump 官网地址:这里 我这里下载的是 class-dump-3.5.dmg 版本号的. 双击.dmg 文件,将  拉倒 /usr / local / bin 文件夹下,这样就能够在终端 ...

  5. NStimer 被堵塞

    我们在界面上滚动一个scrollview,那么我们会发如今停止滚动前,会发现NSTimer未被运行.就好像scrollView在滚动的时候将timer暂停了一样,在查看对应文档后发现,这事实上就是ru ...

  6. Codeforces 240E. Road Repairs 最小树形图+输出路径

    最小树形图裸题,只是须要记录路径 E. Road Repairs time limit per test 2 seconds memory limit per test 256 megabytes i ...

  7. 如何实现对网站页面访问量的统计(javaweb和php)

    如何实现对网站页面访问量的统计(javaweb和php) 一.总结 一句话总结:其实很简单啦,每访问一次那个页面对应的index函数(控制器中的那个函数)访问次数就加1就可以了. 1.javaweb中 ...

  8. 【基础篇】DatePickerDialog日期控件的基本使用(一)

    项目步骤: 1.首先在Main.xml布局文件中添加一个Button标签,用来点击显示日期控件,Main.xml内容如下: <RelativeLayout xmlns:android=" ...

  9. c# 多态的美丽(虚方法、抽象、接口实现)

    面向对象3大特性:封装.继承.多态. 面向对象2大原则: 1)里氏替换原则:子类可以给父类,父类不能赋给子类. 2)开放封闭原则: 封装变化,降低耦合.(对扩展开放,对修改封闭) ********** ...

  10. 【Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) C】 Travelling Salesman and Special Numbers

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 会发现. 进行一次操作过后. 得到的数字肯定是<=1000的 然后1000以下可以暴力做的. 则我们枚举第1步后得到的数字x是 ...