fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define fast ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
  6. #define pb push_back
  7.  
  8. const double PI = 3.141592653589793;
  9.  
  10. string s[10000];
  11. int m;
  12. int d[10000];
  13. int v[10000];
  14. vector <int> e[10000];
  15. int inf = 1e9;
  16.  
  17. void dfs(int u){
  18. if(v[u]) return;
  19. v[u] = 1;
  20. for(auto v : e[u]){
  21. d[v] = min(d[v], d[u] + 1);
  22. dfs(v);
  23. }
  24. }
  25.  
  26. int main() {
  27. fast;
  28. cin >> m;
  29. int y = 0; // Вспомогательная переменная для заполнения массива s[i]
  30. for(int i = 0; i < m; i++){
  31. string s1, s2, s3;
  32. cin >> s1 >> s2 >> s3;
  33. int x1 = -1, x2 = -1;
  34. // Находим индексы в уже имеющемся массиве где s[i] - хранит название элемента, а i это его номер
  35. for(int j = 0; j < 1000; j++){
  36. if(s1 == s[j]) x1 = j;
  37. if(s3 == s[j]) x2 = j;
  38. }
  39. // Если не нашли название в массиве s[i], то добаляем
  40. if(x1 == -1){
  41. x1 = y;
  42. s[y] = s1;
  43. y++;
  44. }
  45. if(x2 == -1){
  46. x2 = y;
  47. s[y] = s3;
  48. y++;
  49. }
  50. e[x1].pb(x2);
  51.  
  52. }
  53. string st, f;
  54. cin >> st >> f;
  55.  
  56. int u = -1, v = -1;
  57. //Считываем название элементов и ищем индексы в массиве s[i]
  58. for(int i = 0; i < 1000; i++)
  59. d[i] = inf;
  60. for(int i = 0; i < 1000; i++){
  61. if(s[i] == st) u = i;
  62. if(s[i] == f) v = i;
  63. }
  64. // Если какое - то название не нашли в массиве s[i] значит его нет и в графе -> ответ -1
  65. if(u == -1 or v == -1){
  66. cout << -1;
  67. return 0;
  68. }
  69. d[u] = 0;
  70. dfs(u);
  71. if(d[v] == inf) cout << -1;
  72. else cout << d[v];
  73. return 0;
  74. }
Success #stdin #stdout 0s 4392KB
stdin
5
Aqua -> AquaVita
AquaVita -> PhilosopherStone
AquaVita -> Argentum
Argentum -> Aurum
AquaVita -> Aurum
Aqua
Aurum
stdout
2