Advertisement
luanaamorim

Untitled

Mar 6th, 2021
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <string>
  4. #include <algorithm>
  5. #include <vector>
  6. #include <cmath>
  7. #include <iomanip>
  8. #include <map>
  9. #include <cstring>
  10. #define ll long long
  11. #define INF 99999999
  12. #define MAX 300000
  13. #define MOD 1000000007
  14. #define par pair<int, ll>
  15. #define lsb(x) (x & -x)
  16. #define _ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  17.  
  18. using namespace std;
  19.  
  20. vector<par> grafo[1<<18];
  21. ll composto[1<<18], n, memo[1<<18], resp, a, b, c;
  22.  
  23. void crivo()
  24. {
  25. int k = (1<<18) - 1;
  26. composto[1] = composto[0] = 1;
  27. for (int i = 2; i <= k; i++)
  28. {
  29. if (composto[i]) continue;
  30. for (int j = 2; j*i <= k; j++)
  31. {
  32. composto[j*i] = 1;
  33. }
  34. }
  35. }
  36.  
  37. ll f(int u, int p)
  38. {
  39. //if (memo[u]) return memo[u];
  40. //cout << u << ' ' << p << endl;
  41. for (int i = 0; i < grafo[u].size(); i++)
  42. {
  43. ll v = grafo[u][i].first, w = grafo[u][i].second;
  44. if (v == p) continue;
  45. memo[v] = f(v, u);
  46. resp = max(resp, memo[v]+w+memo[u]);
  47. memo[u] = max(memo[u], memo[v] + w);
  48. }
  49.  
  50. return memo[u];
  51. }
  52.  
  53. int main()
  54. {_
  55. cin >> n;
  56. crivo();
  57. for (int i = 0; i < n - 1; i++)
  58. {
  59. cin >> a >> b >> c;
  60. if (composto[c]) continue;
  61. grafo[a].push_back(par(b, c));
  62. grafo[b].push_back(par(a, c));
  63. }
  64.  
  65. for (int i = 1; i <= n; i++)
  66. {
  67. if (!memo[i]) f(i, 0);
  68. }
  69.  
  70. cout << resp << endl;
  71.  
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement