题解 P7369【Elder】

· · 题解

思路

这是一道模拟题,记录一下老魔杖在谁手里就行了

坑点

如果A从B那里得到了老魔杖,之后B又从A手中将老魔杖抢了回去,老魔杖的效忠对象就只有2人,而不是3人

其他问题就看代码的注释吧

Code

#include<iostream>
#define N 100010
using namespace std;
int hp[N]/*用于记录老魔杖在哪个巫师手里*/,n;
int ans=1/*记录老魔杖共有多少个效忠对象*/,pd[N];
char a,b,A,wsna/*记录老魔杖目前的效忠对象*/;
signed main()
{
    cin>>A;
    hp[A]=1;//老魔杖在A手中 
    wsna=A;// 最开始老魔杖的效忠对象是A 
    pd[A]=1;//A已经得到过老魔杖 
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a>>b;
        if(hp[b]==1)//如果老魔杖在B手中 
        {
            hp[a]=1;
            hp[b]=0;
            //转移老魔杖 
            wsna=a;//将老魔杖的效忠对象改为a 
            if(pd[a]==0)//如果a没有得到过老魔杖 
            {
                pd[a]=1;//标记a 
                ans++;//增加老魔杖的效忠对象个数 
            }
        }
    }
    cout<<wsna<<endl;
    cout<<ans<<endl;
    return 0;
}