HDU2094

http://acm.hdu.edu.cn/showproblem.php?pid=2094
思路,用map建立节点记录名字与id信息,统计所有入度为1的节点,有且只有一个入度为1的节点的情况就是yes,否则no

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

int inDegree[10005]={0};

int main()
{
    int n, t, temp, cnt;
    string p,q; 
    map name;
    while(scanf("%d", &n) && n!=0)
    {
        for(int i=0;i<=n;i++)
          inDegree[i] = 0;
        name.clear();
        t = 1;
        while(n--)
        {
            cin>>p>>q;
            if(!name.count(p))
            {
                name.insert(make_pair(p,t));
                t++;
            }
            if(!name.count(q))
            {
                name.insert(make_pair(q,t));
                t++;
            }
            temp = name[q];
            inDegree[temp]++;
        }
        cnt = 0;
        for(int i = 1; i < t; i++)
        {
            if(inDegree[i]==0)
              cnt++;
        }
        if(cnt==1)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
} 

出现了很多意外的情况,map是边百度边写的,完全不会用,也很神奇自己能想起来,但是后面由于把大小写写错了以为是这边的问题,其实是大小写和初始化的问题。从今往后做这种有多组输入数据使用STL模板和数组建立状态信息的题目或者工程的时候一定要记得初始化,老友!!!!

你可能感兴趣的:(HDU2094)