求助???
  • 板块P2814 家谱
  • 楼主AHXBXA
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/12/4 18:31
  • 上次更新2023/11/3 22:56:07
查看原帖
求助???
324709
AHXBXA楼主2021/12/4 18:31

本地能过样例但全WA???

#include <stdio.h>
#include <string>
#include <map>
using namespace std;
map<string, int> Re;
map<int, string> Name;
int dad[10000];
void set()
{
    for (int i = 0; i < 10000; i++)
    {
        dad[i] = i;
    }
}
int find(int x)
{
    if (dad[x] == x)
        return x;
    else
        return dad[x] = find(dad[x]);
}
void merge(int i, int j)
{
    dad[i] = find(dad[j]);
}
string read()
{
    char temp;
    string result = "";
    temp = getchar();
    while (true)
    {
        result += temp;
        scanf("%c", &temp);
        if (temp == '\n')
            break;
    }
    return result;
}
void pri(string A)
{
    for (int i = 0; i < A.size(); i++)
    {
        printf("%c", A[i]);
    }
}
int main()
{
    char way;
    string name;
    set();
    int now = 1;
    int now_d;
    scanf("%c", &way);
    for (;;)
    {
        if (way == '#')
        {
            name = read();
            if (Re[name] == 0)
            {
                Name[now] = name;
                Re[name] = now++;
            }
            now_d = Re[name];
            scanf("%c", &way);
        }
        else if (way == '+')
        {
            name = read();
            if (Re[name] == 0)
            {
                Name[now] = name;
                Re[name] = now++;
            }
            merge(Re[name], now_d);
            scanf("%c", &way);
        }
        else if (way == '?')
        {
            name = read();
            pri(name);
            printf(" ");
            pri(Name[find(Re[name])]);
            printf("\n");
            scanf("%c", &way);
        }
        else
            return 0;
    }
    return 0;
}
2021/12/4 18:31
加载中...