题目链接:http://codeforces.com/problemset/problem/501/B
--------------------------------------------------------------------------------
题意:N个改名操作,要求输出最开始和最终的名字
思路:利用map的操作,读取输入之后,查找是否在key中,如果不在key中,建立新的关系。如果在key中,建立新的key-value对,擦除旧的key-value对。最终通过迭代器输出key,value即可,表示起始名称与最终名称。
代码:
#include<cstdio> #include <map> #include <algorithm> #include<string> #include<iostream> using namespace std; map<string,string>::iterator it; int main(void){ int n = 0; while(~scanf("%d",&n)){ map<string,string> m1; string a,b; for(int i=0;i<n;i++){ cin>>a>>b; if(m1.count(a)==0) m1[a]=a; m1[b]=m1[a]; m1.erase(a); } cout << m1.size() << ‘\n‘; for(it=m1.begin();it!=m1.end();it++) { cout << it->second << ‘ ‘ << it->first << ‘\n‘; } } return 0; }