本文主要是介绍蓝桥算法练习系统—卡勒沃夫之弱水路三千(提高型)(拓扑排序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述
锦瑟年华谁与度 莫问情归处 只影向斜阳 剑吼西风 欲把春留驻
天涯芳草无归路 回首花无数 解语自销魂 弱袂萦春 尘缘不相误
......
在卡勒沃夫充满文学杀伤力的声音中,身处紫荆2号楼202B的四位远近高低各不同的室友纷纷回忆起了各自波澜起伏的过去,并对长在百草园,邻有百花谷的现状表达了各自的见解。
某Q:"...我小学就开窍了...她的父母说我很好,但是...今天又和北林的联系了..."
某X:"...差点就成了,结果到学校了...这个方法放假了我去对我的同桌用!..."
某W:"..."(千言万语不言中,有大量的故事等待考古)
某Z:"...为了来清华...咱们审美观不一样,不会抢..."
......
卡勒沃夫在这个不朽的夜话中搜集出了某人零散的历任女友资料,为了强迫某人将他出的题目的标程交出,现在卡勒沃夫需要一个能将这些零散信息整合起来的程序。伴随着雄壮委婉动人的音乐,身为程序设计快男(超女)的你降临了!卡勒沃夫正对着您做Orz状并请求着:"神牛啊~请施舍给我一段程序把~偶米头发~"。。
输入格式
第一行为一个不超过5的整数T,表示数据的组数。之后每组数据的一行为一个不超过100的整数n。之后n行每行有两个用单个空格隔开的字符串(每个字符串只有英文大小写字母,长度不超过10),为两位mm的名字。每行第一个mm先于第二个mm成为某人的女友。
在这里我们假装诅咒某人不会同时被两个或两个以上mm泡,某个mm抛弃了某人后不会再吃回头草,同时卡勒沃夫深邃的洞察力使得他收集到了充足的信息以确定某人女友的先后顺序。
在小数据组中出现的人物不超过13个
输出格式
输出T行,每行对应一组数据,并按照mm们从先到后成为某人女友的顺序输出她们的名字,各个名字间用一个空格隔开。
思路 拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点 的线性序列。拓扑排序通常用来“排序”具有依赖关系的任务。 根据题目给的依赖关系输出拓扑排 序序列
map<string,vector<string> >e;
map<string,int>ind;set<string>st;
vector<string>ans;
void solve()
{ int n; cin>>n; e.clear(); ind.clear(); st.clear(); ans.clear(); for(int i=0;i<n;i++) { string a,b; cin>>a>>b; st.insert(a); st.insert(b); ind[b]++; e[a].push_back(b); } string root; for(set<string>::iterator it=st.begin();it!=st.end();it++) if(ind[*it]==0)root=*it; queue<string>q; q.push(root); while(!q.empty()) { string s=q.front(); q.pop(); cout<<s<<" "; for(int i=0;i<e[s].size();i++) { string y=e[s][i]; if(--ind[y]==0) q.push(y); } } cout<<endl;
}
这篇关于蓝桥算法练习系统—卡勒沃夫之弱水路三千(提高型)(拓扑排序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!