关于银河英雄传说的解题报告

    怎么说呢,这道题还是比较水的,连我这种蒟蒻都能写出来。但其中历尽艰辛,回想起来便老泪纵横。这道题思路很简单,建立一个父亲数组自然是不用多说的,除此之外建立一个数组表示一个数到队首的距离,另一个表示此数所在列的元素个数。我在第一次find函数写挂了,所以好好的学习了一下。后来我在本地运行十分顺畅,提交时却爆零,加上题目旁边有人在抱怨输入数据的格式,我就认为是某平台的问题,就此纠结了约半个小时。后来阅读代码时发现一行神奇的语句:for(int i=i;i<=n;i++),我还有什么可说呢?
    虽说这道题不难,但也提醒我每一次打完代码都要自己逐字阅读。也算是很有收获吧!        

#include
#include
#include
using namespace std;
int father[30010];
int a[30010];
int b[30010];
int find(int x)
{
    if(father[x]==x)return x;
    int temp=find(father[x]);
    a[x]=a[x]+a[father[x]];
    return father[x]=temp;
}
int main()
{
    int n,x,y,d,e;
    char c;
    cin>>n;
    for(int i=1;i<=30000;i++)
    {
        father[i]=i;
        b[i]=1;
    }
    for(int i=1;i<=n;i++)
    {
        cin>>c>>d>>e;
        x=find(d);
        y=find(e);
        if(c=='M')
        {
            father[x]=y;
            a[x]=b[y];
            b[y]+=b[x]; 
        } 
        else if(c=='C')
        {
            if(x!=y)
            cout<<"-1"<else
            cout<<abs(a[d]-a[e])-1<return 0;
 } 

你可能感兴趣的:(关于银河英雄传说的解题报告)