南邮 OJ 1115 路径图排序 【绿色】

路径图排序 【绿色】

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 198            测试通过 : 23 

比赛描述

南邮野生物基金会(NUPT-WF)的志愿者近期去南京老山国家森林公园,寻找住在森林附近濒临灭绝的动物。NUPT-WF志愿者得到一份老山国家森林公园地图,该森林公园包括许多空地,和连接空地的路径。不同种濒危动物住在每条路径上,没有动物住在空地上。

NUPT-WF希望从森林公园找到一些濒危动物。但是它们的路径图太过混乱,因为空地和动物未按特定序列给出。现请你帮助NUPT-WF志愿者给南京老山国家森林公园的路径图排序。




输入

动物以单词表示,空地用数字表示,最多有500个空地。

空地0总是森林公园的入口。输入为未分类的森林公园的路径图。

每一行描述两个空地之间的路径,表示为一对数字和住在路径上的一列动物。

输出

输出为一个排序后的路径图,空地数字从0开始增长,动物名从a到z排序。路径由路径任一端的空地号进行排序。所有住在路径上的动物依字母顺序排序。

样例输入

1 0 puma lynx
2 0 puma
1 2 vole

样例输出

0 1 lynx puma 
0 2 puma
1 2 vole

题目来源

“IBM南邮杯”团队赛2009



#include<iostream>
#include<string>
#include<sstream>
#include<set>
using namespace std;

struct path{
	int i,j;
	set<string> animals;
};
bool operator<(const path& p1,const path& p2){
	if(p1.i != p2.i)
		return p1.i<p2.i;
	else
		return p1.j<p2.j;
}
int main(){
	path aPath;
	stringstream ss;
	string s;
	set<path> pathes;
	set<path>::iterator p_it;
	set<string>::iterator s_it;
	while(cin>>aPath.i>>aPath.j && getline(cin,s)){
		if(aPath.i>aPath.j)
			swap(aPath.i,aPath.j);
		ss.clear();
		ss.str(s);
		aPath.animals.clear();
		while(ss>>s){
			aPath.animals.insert(s);
		}
		pathes.insert(aPath);
	}
	for(p_it=pathes.begin();p_it!=pathes.end();++p_it){
		cout<<p_it->i<<" "<<p_it->j;
		for(s_it=p_it->animals.begin();s_it!=p_it->animals.end();++s_it){
			cout<<" "<<*s_it;
		}
		cout<<endl;
	}
	return 0;
}






你可能感兴趣的:(ACM,绿色,南邮OJ,路径图排序)