#include <stdio.h>
#include <string>
#include <map>
using namespace std;
map<string,int> m;//完成string->int的映射map
int in[2002];
int main(){
int n;
while(scanf("%d",&n)!=EOF&&n!=0){
for(int i=0;i<2*n;i++) in[i]=0;//初始化有向图入度
m.clear();//map关系清空
int idx=0; //下一个被映射的数字
for(int i=0;i<n;i++){//读入选手关系
char str1[50],str2[50];
scanf("%s%s",str1,str2);//输入两选手的名称
string a=str1,b=str2;//将字符数组保存在字符串中
int idxa,idxb;
if(m.find(a)==m.end())//找不到a的映射,即暂时没有a元素,新增编号指向该新元素
m[a]=idx++;
if(m.find(b)==m.end()){
idxb=idx;
m[b]=idx++;
}
else idxb=m[b];//找到了b的映射
in[idxb]++;
} //idx记录参赛人数
int cnt=0;//记录不成环的节点
for(int i=0;i<idx;i++)//统计入度为0的节点
if(in[i]==0) cnt++;
puts((cnt==1)?"YES\n":"NO\n"); //只有一个节点入度为0即产生冠军
}
return 0;
}
3
alice bob
smith john
alice smith
5
a c
c d
d e
b c
a d
0
- 键值对与拓扑排序