http://acm.hdu.edu.cn/showproblem.php?pid=2094
思路,用map建立节点记录名字与id信息,统计所有入度为1的节点,有且只有一个入度为1的节点的情况就是yes,否则no
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <map>
using namespace std;
int inDegree[10005]={0};
int main()
{
int n, t, temp, cnt;
string p,q;
map<string,int> 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模板和数组建立状态信息的题目或者工程的时候一定要记得初始化,老友!!!!