Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int p[10000005];
  6. int r[10000005];
  7.  
  8. inline int get(int nom) {
  9. if (p[nom] != nom) {
  10. p[nom] = get(p[nom]);
  11. }
  12. return p[nom];
  13. }
  14.  
  15. inline void uni(int a, int b) {
  16. a = get(a);
  17. b = get(b);
  18. if (r[a] < r[b]) {
  19. p[a] = b;
  20. r[b] += r[a];
  21. }
  22. else {
  23. p[b] = a;
  24. r[a] += r[b];
  25. }
  26. }
  27.  
  28. int INF = 1e9;
  29.  
  30. int main() {
  31. ios_base::sync_with_stdio(0);
  32. cin.tie(0);
  33. cerr.tie(0);
  34. cout.tie(0);
  35. freopen("dsu.in", "r", stdin);
  36. freopen("dsu.out", "w", stdout);
  37. int n, k;
  38. cin >> n >> k;
  39. for (int i = 0; i < n; i++) {
  40. p[i] = i;
  41. r[i] = 1;
  42. }
  43. long long ans = 0;
  44. int u, v;
  45. int c;
  46. int du, dv;
  47. int dc;
  48. int m;
  49. for (int i = 0; i < k; i++) {
  50. //scanf("%d %d %d %d %d %d %d", &u, &v, &c, &du, &dv, &dc, &m);
  51. cin >> u >> v >> c >> du >> dv >> dc >> m;
  52. du = (du % n + n) % n;
  53. dv = (dv % n + n) % n;
  54. dc = (dc % INF + INF) % INF;
  55. for (int j = 0; j < m; j++) {
  56. if (get(u) != get(v)) {
  57. ans += c;
  58. uni(u, v);
  59. }
  60. u = ((u + du) >= n ? u + du - n : u + du);
  61. v = ((v + dv) >= n ? v + dv - n : v + dv);
  62. c = ((c + dc) >= INF ? c + dc - INF : c + dc);;
  63. }
  64. }
  65. cout << ans;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement