ps: 原本听说用set容器做是最好的...然而我并不懂..就用C语言做了...就是先输入赢得一组和输的一组,然后把重复的删掉,再比较赢得一组里没有出现在输的一组里的人数,如果是1就是YES,其他就是NO。。

代码:

#include "stdio.h"
#include "string.h"
char win[1000][100];
char lost[1000][100];    //定义的字符串数组... 
int main(){
    int i,s,n,j,num,sum;
    int flag[1100],flag1[1100];
    while(~scanf("%d",&n) && n){
        for(i=0;i<n;i++){
            scanf("%s %s",&win[i],&lost[i]);    
        }
        num=sum=0;
        for(i=0;i<n;i++){
            flag[i]=1;
            flag1[i]=1;
        }
        for(i=0;i<n;i++){
            for(j=i;j<n-1;j++){
                if(flag[j+1]==0) continue;
                if(strcmp(win[i],win[j+1])==0){
                    flag[j+1]=0;
                    continue;
                }
            }
         }
         for(i=0;i<n;i++){
            for(j=i;j<n-1;j++){
                if(flag1[j+1]==0) continue;
                if(strcmp(lost[i],lost[j+1])==0){
                    flag1[j+1]=0;
                    continue;
                }
            }
         }
         for(i=0;i<n;i++){
             sum+=flag[i];
         }
    

        for(i=0;i<n;i++){
            if(flag[i]==0) continue;
            for(j=0;j<n;j++){
                if(flag1[j]==0) continue;
                if(strcmp(win[i],lost[j])==0){
                   num++;    
                } 
            }
        }
        if(sum-num==1) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}