本地和洛谷在线IDE对于测试数据1输出都是两个Yes.
但是交测评提示有输出No.
测评环境不一样?还是内存这块什么的神奇bug
测试数据点就不发了,容易棕
#include<iostream>
#include<cstdio>
using namespace std;
struct Name
{
int L=0;
char N[50];
}name[20005];
int leader[20005];
int Ns, M, T;
void init() {
for (int i = 0; i < 20005; i++) {
leader[i] = i;
}
}
int gotf(int a) {
if (leader[a] == a)return a;
leader[a] = gotf(leader[a]);
return leader[a];
}
void B(int a,int b) {
leader[gotf(a)] = gotf(b);
}
int IDcheak(Name n) {
/*cout << "qwq: " << n.L << endl;*/
for (int i = 1; i <= Ns; i++) {
if (n.L == name[i].L) {
bool flag = true;
for (int j = 0; j <= n.L; j++) {
/*cout << n.N[j] << " " << name[i].N[j] << endl;*/
if (n.N[j] != name[i].N[j]) {
flag = false;
break;
}
}
if (flag) {
return i;
}
}
}
/*cout << "Warming!\n";*/
return -1;
}
int main() {
init();
cin >> Ns >> M; getchar();
for(int i=1;i<=Ns;i++) {
char cha = 0;
while (cha != '\n') {
cha = getchar();
name[i].N[name[i].L] = cha;
name[i].L++;
}
name[i].L--;
name[i].L--;
}
Name ls;
while (M--) {
ls.L = 0;
char cha = 0; int ID[2]{};
while (cha != ' ') {
cha = getchar();
ls.N[ls.L] = cha;
ls.L++;
}
ls.L--;
ls.L--;
ID[0] = IDcheak(ls);
cha = 0;
ls.L = 0;
while (cha != '\n') {
cha = getchar();
ls.N[ls.L] = cha;
ls.L++;
}
ls.L--;
ls.L--;
ID[1] = IDcheak(ls);
/*cout << "\t\tA:" << ls.L << " " << ID[1] << " " ;
for (int j = 0; j <= ls.L; j++) {
cout << ls.N[j];
}cout << endl;*/
B(ID[0], ID[1]);
}
cin >> T; getchar();
while (T--) {
ls.L = 0;
char cha = 0; int ID[2];
while (cha != ' ') {
cha = getchar();
ls.N[ls.L] = cha;
ls.L++;
}
ls.L--;
ls.L--;
ID[0] = IDcheak(ls);
cha = 0;
ls.L = 0;
while (cha != '\n' && cha != EOF) {
cha = getchar();
ls.N[ls.L] = cha;
ls.L++;
}
ls.L--;
ls.L--;
ID[1] = IDcheak(ls);
if (gotf(ID[0]) == gotf(ID[1])) {
cout << "Yes.\n";
}
else {
cout << "No.\n";
}
}
return 0;
}