【例题 6-21 UVA - 506】System Dependencies
2017-11-18 17:09
393 查看
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
记录每个物品它的依赖有哪些,以及它被哪些东西依赖就可以了。
显式安装的东西不能被隐式删除删掉(就是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.5[图的概念和拓扑序] 例题6-21 UVa506
- 紫书例题 10-21 UVa 11971 连续概率
- 例题10-21 多边形 UVa11971
- UVa #1336 Fixing the Great Wall (例题9-21)
- UVa #1592 Database (例题5-9)
- 例题3-6 环状序列(CircularSequence, ACM/ICPC Seoul 2004, UVa1584)
- 例题:Abbott的复仇(UVa 816)
- 例题6-9 UVa839 Not so Mobile(树)
- 例题8-13 UVA 11093 Just Finish it up 环形跑道
- 紫书 例题7-2 UVA 11059 暴力枚举
- 例题 6-15 UVA 10305 Ordering Tasks 给任务排序
- 紫书例题10-16 UVa 12230 过河
- 例题6-19 自组合(Self-Assembly, ACM/ICPC World Finals 2013, UVa 1572)
- 紫书 例题 10-22 统计问题 UVa1640
- 例题7-3 分数拆分(Fractions Again?!, UVa 10976)
- 例题7-1 UVa725 Division(枚举)
- Uva129 Krypton Factor【dfs回溯】【例题7-5】
- 例题1.23 遥远的银河 UVa1382
- UVA506 System Dependencies(模拟)
- 【dp】例题9-2 UVa 437 (HDU 1069)