Dirigida mapa STL gráfico acíclico

Entrenamiento 2 - título B

Jin Yong fue el más famoso y popular china wuxia (El que combatir malas personas por su Wukong es decir, Wushu y Kongfu) novelista que vivía en Hong Kong. Entre 1955 y 1972, escribió 14 novelas que le valió una reputación como uno de los más grandes y más populares escritores chinos. Más de 100 millones de copias de sus obras se han vendido en todo el mundo, sin incluir un número incontable de copias pirateadas. Las obras de Jin Yong parecen tener magia. Una vez que comience a leer una novela suya, que simplemente no puede parar hasta que lo termine.
El mes pasado, Jin Yong falleció a la edad de 94. Muchos fans de Jin Yong en PKU llevó a cabo una reunión con él memorizar. Los fans de Jin Yong siempre como para discutir o argumentar o incluso discutir por cuya Wukong son mejores entre los personajes de su novela wuxia. Durante la reunión, esto sucedió de nuevo:
Cada seguidores dijeron algunas palabras como “Wukong de Qiao Feng es mejor que Guo Jing”. Obviamente, esas palabras pueden contradecirse entre sí y luego peleas causa. Como aburrido y programador masculina girlfriendless de Ingeniería Eléctrica e Informática de la escuela, siempre se quiere hacer algunas cosas. Por lo que están ansiosos de señalar las contradicciones tan pronto como sea posible. Eso significa, que quieren averiguar el primero cuyas palabras contradicen las palabras dichas por otros antes que él.
Tenga en cuenta que si A es mejor que B, y B es mejor que C, entonces por supuesto que A tiene que ser mejor que C.

Entrada

Ya no hay más de 15 casos de prueba.
Para cada caso de prueba:
La primera línea es un número entero n (1 <= n <= 20), lo que significa que hay n frases.
Las siguientes n líneas son aquellas frases n que está en el siguiente formato:
s1 s2.
Esto significa que alguien dijo Wukong de que era mejor que s1 s2 de. Tanto S1 y S2 son los nombres de los personajes de Jin Yong, que consta sólo de las letras inglesas. Está garantizado que S1 y S2 son diferentes, y su longitud no es más de 30. Los nombres son mayúsculas y minúsculas.

Salida

Para cada caso de prueba, imprimir la primera frase que causan una contradicción. Si hay ninguna contradicción, imprimir 0 en su lugar.

Ejemplo de entrada

2
BrokenReputation ExtinctNun
HelloLaught EnvelopeNotFlat
6
LandOverWind LonelyLight
FireMonk CutTheForest
CutTheForest lookcrazy
MakeFoxRush LetMeGo
HeroAunt UniqueLand
lookcrazy FireMonk

Ejemplo de salida

0
lookcrazy FireMonk

Insinuación

NO trate de averiguar quién son esos nombres en la muestra y perder el tiempo.

#pragma warning (disable:4996)
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define inf 0X3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 20 + 5;

map<string, vector<string>> a;
set<string> visit;

bool dfs(string x, string y)
{
	visit.insert(x);
	map<string, vector<string>>::iterator iter = a.find(x);
	if (iter != a.end())
	{
		for (int i = 0; i < (*iter).second.size(); i++)
		{
			if ((*iter).second[i] == y)
				return true;
			if (visit.end() == visit.find((*iter).second[i]))
				return dfs((*iter).second[i], y);
		}
	}
	return false;
}

int main()
{
	int n;
	while (scanf("%d", &n) != EOF)
	{
		a.clear();
		getchar();
		bool flag = 0;
		for (int cas = 1; cas <= n; cas++)
		{
			string str;
			getline(cin, str);
			string s1, s2;
			string tmp = "";
			for (int i = 0; str[i] != '\0'; i++)
			{
				if (str[i] == ' ')
				{
					s1 = tmp;
					tmp = "";
				}
				else
					tmp += str[i];
			}
			s2 = tmp;
			visit.clear();
			if (!dfs(s2, s1))
			{
				a[s1].push_back(s2);
			}
			else
			{
				cout << s1 << " " << s2 << endl;
				flag = 1;
			}
		}
		if (!flag)
			printf("0\n");
	}
	return 0;
}

Ideas:
mantenimiento de un nodo de diagramas de tipo cadena, cada nuevo borde se determina si la configuración en anillo de la figura (reverso determina si la ruta de comunicación).
Fig tipo de cadena se almacena con el mapa.

Gangster adjuntar un código corto %%%
Aquí Insertar imagen Descripción

Publicado 28 artículos originales · ganado elogios 0 · Vistas 330

Supongo que te gusta

Origin blog.csdn.net/xukeke12138/article/details/104712160
Recomendado
Clasificación