Advertisement
MegaVerkruzo

Untitled

Nov 22nd, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdio>
  4.  
  5. using namespace std;
  6.  
  7. const int INF = 1e9;
  8.  
  9. int main() {
  10. //freopen("input.txt", "r", stdin);
  11. int n, k;
  12. cin >> n >> k;
  13. vector<vector<int>> sv(n + 1);
  14. vector<pair<vector<int>, vector<int>>> a(n + 1);
  15. for (int l = 1; l <= n; ++l) {
  16. vector<int> p(k), q(k);
  17. for (int i = 0; i < k; ++i) {
  18. cin >> p[i];
  19. }
  20. for (int i = 0; i < k; ++i) {
  21. cin >> q[i];
  22. }
  23. a[l].first = p;
  24. a[l].second = q;
  25. }
  26. for (int i = 0; i < n - 1; ++i) {
  27. int x, y;
  28. cin >> x >> y;
  29. sv[x].push_back(y);
  30. sv[y].push_back(x);
  31. }
  32. vector<vector<int>> f(n + 1, vector<int> (n + 1, -1));
  33. for (int i = 1; i <= n; ++i) {
  34. for (int l = 1; l <= n; ++l) {
  35. if (i == l) {
  36. f[i][l] = 0;
  37. continue;
  38. }
  39. bool o = true;
  40. for (int q = 0; q < k; ++q) {
  41. if (!(a[i].first[q] >= a[l].first[q] && a[i].first[q] <= a[l].second[q] ||
  42. a[i].second[q] >= a[l].first[q] && a[i].second[q] <= a[l].second[q] ||
  43. a[l].first[q] >= a[i].first[q] && a[l].first[q] <= a[i].second[q] ||
  44. a[l].second[q] >= a[i].first[q] && a[l].second[q] <= a[i].second[q])) {
  45. f[i][l] = 1;
  46. }
  47. }
  48. }
  49. }
  50. vector<vector<int>> flo(n + 1, vector<int> (n + 1, INF));
  51. for (int i = 1; i <= n; ++i) {
  52. flo[i][i] = 0;
  53. for (auto next : sv[i]) {
  54. flo[i][next] = 1;
  55. }
  56. }
  57. for (int i = 1; i <= n; ++i) {
  58. for (int l = 1; l <= n; ++l) {
  59. for (int j = 1; j <= n; ++j) {
  60. flo[i][l] = min(flo[i][l], flo[i][j] + flo[j][l]);
  61. }
  62. }
  63. }
  64. int mi = INF;
  65. for (int i = 1; i <= n; ++i) {
  66. for (int l = 1; l <= n; ++l) {
  67. if (f[i][l] == 1) {
  68. mi = min(mi, flo[i][l]);
  69. }
  70. }
  71. }
  72. if (mi == INF) {
  73. cout << -1;
  74. } else {
  75. cout << mi;
  76. }/*
  77. cout << "\n";
  78. for (int i = 1; i <= n; ++i) {
  79. for (int l = 1; l <= n; ++l) {
  80. cout << f[i][l] << " ";
  81. }
  82. cout << "\n";
  83. }
  84. cout << "\n";
  85. for (int i = 1; i <= n; ++i) {
  86. for (int l = 1; l <= n; ++l) {
  87. cout << flo[i][l] << " ";
  88. }
  89. cout << "\n";
  90. }*/
  91. return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement