【HDU1181】 Clase de deformación (investigación combinada)

Clase de transformación

Límite de tiempo: 2000 / 1000ms (Java / Otro) Límite de memoria: 131072 / 65536K (Java / Otro)

Total de envíos: 46 Envío (es) aceptado (s): 16

Fuente: Times New Roman | Verdana |
Tamaño de fuente de Georgia : ← →

Descripción del problema

Uh ... Harry tuvo un pequeño problema en la clase de transformación porque no fue capaz de memorizar todos los hechizos como Hermione y convertir arbitrariamente una pelota de béisbol en un erizo o algo así, pero descubrió una ley unificada del hechizo de transformación: si A hechizo es una palabra que comienza con ay termina con b, por lo que su función es convertir el objeto A en el objeto B.
Harry ha enumerado todos los hechizos que puede jugar en una tabla, y quiere que le ayudes a calcular si puede completar el tarea del maestro, convertir una B (pelota) en una M (ratón), ya sabes, si no puede hacerlo él mismo, tiene que pedirle consejo a Hermione y se ve obligado a escuchar muchos buenos principios de aprendizaje.

Entrada

Hay varios grupos de datos de prueba. Hay varias líneas en cada grupo, una palabra en cada línea, incluidas solo letras minúsculas, que son todos los hechizos que Harry conoce. El número 0 significa el final de un grupo de entrada.

Salida

Si Harry puede completar su tarea, escriba "Sí", de lo contrario, escriba "No" (no ignore el punto).

Entrada de muestra

por lo
pronto
río
va
ellas
consiguió
la luna
comienza
grande
0

Salida de muestra

Sí.
Pista
Pista que
Harry puede pronunciar este hechizo: "big-got-them".

Análisis: No quiero escribir una búsqueda amplia y una búsqueda profunda, usé una y lo descubrí.

#include <iostream>  
#include <cstring> 
#include <algorithm> 
using namespace std;  
string str;  
int father[30];  
find(int x)  
{  
    if(x!=father[x])  
        father[x]=find(father[x]);  
    return father[x];  
}  
void mere(int x,int y)  
{  
    x=find(x);  
    y=find(y);  
    if(x!=y)  
        father[y]=x;  
}  
int main()  
{  
    int i;  
    while(cin>>str)  
    {  
        memset(father,0,sizeof(father));  
        for(i=0;i<29;i++)  
            father[i]=i;  
        int len=str.length();  
        int x=find(str[0]-'a');  
        int y=find(str[len-1]-'a');  
        if(x!=y&&y!='b'-'a')  
            mere(x,y);  
        while(cin>>str)  
        {  
            if(!str.compare("0"))  
                break;  
            len=str.length();  
            x=find(str[0]-'a');  
            y=find(str[len-1]-'a');  
            if(x!=y&&y!='b'-'a')  
                mere(x,y);  
        }  
        x=find('m'-'a');  
        y=father['b'-'a'];  
        if(x!=y)  
            cout<<"No."<<endl;  
        else  
            cout<<"Yes."<<endl;  
    }  
    return 0;  
}  

Supongo que te gusta

Origin blog.csdn.net/thesprit/article/details/51970041
Recomendado
Clasificación