Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int p[10000005];
- int r[10000005];
- inline int get(int nom) {
- if (p[nom] != nom) {
- p[nom] = get(p[nom]);
- }
- return p[nom];
- }
- inline void uni(int a, int b) {
- a = get(a);
- b = get(b);
- if (r[a] < r[b]) {
- p[a] = b;
- r[b] += r[a];
- }
- else {
- p[b] = a;
- r[a] += r[b];
- }
- }
- int INF = 1e9;
- int main() {
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cerr.tie(0);
- cout.tie(0);
- freopen("dsu.in", "r", stdin);
- freopen("dsu.out", "w", stdout);
- int n, k;
- cin >> n >> k;
- for (int i = 0; i < n; i++) {
- p[i] = i;
- r[i] = 1;
- }
- long long ans = 0;
- int u, v;
- int c;
- int du, dv;
- int dc;
- int m;
- for (int i = 0; i < k; i++) {
- //scanf("%d %d %d %d %d %d %d", &u, &v, &c, &du, &dv, &dc, &m);
- cin >> u >> v >> c >> du >> dv >> dc >> m;
- du = (du % n + n) % n;
- dv = (dv % n + n) % n;
- dc = (dc % INF + INF) % INF;
- for (int j = 0; j < m; j++) {
- if (get(u) != get(v)) {
- ans += c;
- uni(u, v);
- }
- u = ((u + du) >= n ? u + du - n : u + du);
- v = ((v + dv) >= n ? v + dv - n : v + dv);
- c = ((c + dc) >= INF ? c + dc - INF : c + dc);;
- }
- }
- cout << ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement