zoukankan      html  css  js  c++  java
  • 【例题 6-21 UVA

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

    在这里输入题意

    【题解】

    记录每个物品它的依赖有哪些,以及它被哪些东西依赖就可以了。 显式安装的东西不能被隐式删除删掉(就是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;
    }
    
  • 相关阅读:
    kendoGrid edit功能
    kendoGrid Event事件
    你不得不看的81条JavaScript编码小技巧,吐血整理,建议收藏
    H265编码视频流媒体播放器EasyPlayer.js支持9宫格视频同屏播放的写法
    EasyNTS 交叉编译海思系统下的可执行程序实现及测试过程
    EasyNTS在Go1.15版本下linux下无法编译的问题优化
    TSINGSEE青犀视频开发Python3行人分析功能运行一段时间后崩溃是什么原因?
    Mysql数据库导入excel和乱码问题
    聊聊5G:5G技术的落地能给视频娱乐、VR直播带来怎样的潜力?
    企业直播的核心点在哪里?未来将如何发展?
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7857375.html
Copyright © 2011-2022 走看看