Submission #2561451


Source Code Expand

#include <iostream>
#include <vector>
#include <memory>
using namespace std;

struct UnionFindPOL {
  vector<int> data;
  vector<int> position;
  vector<int> offset;

  UnionFindPOL(int size) : data(size, -1), position(size, 0), offset(size, 0) { 

  }

  bool unionSet(int x, int y) {
    x = root(x); y = root(y);
    if (x != y) {
      if (data[y] < data[x]) swap(x, y);
      data[x] += data[y]; data[y] = x;
    }
    return x != y;
  }

  bool addDist(int l, int r, int d) {
      int rl = root(l);
      int rr = root(r);

      if(rl == rr) {
          int posl = getPosition(l);
          int posr = getPosition(r);
          if(posr - posl == d) {
              return true;
          } else {
              return false;
          }
      } else {
          if(data[rl] < data[rr]) {
            int offsetr = position[l] + d - position[r];
            if(data[rr] == -1) {
                position[rr] = offsetr;
            } else {
                offset[rr] = offsetr;
            }
            data[rl] += data[rr];
            data[rr] = rl;
          } else {
            int offsetl = position[r] - d - position[l];
            if(data[rl] == -1) {
                position[rl] = offsetl;
            } else {
                offset[rl] = offsetl;
            }
            data[rr] += data[rl];
            data[rl] = rr;
          }
          return true;
      }

  }

  int getPosition(int x) {
      int pos = position[x];
      int p = x;
      while(p >= 0) {
          pos += offset[p];
          p = data[p];
      }
      return pos;
  }

  bool findSet(int x, int y) {
    return root(x) == root(y);
  }

  int root(int x) {
    //return data[x] < 0 ? x : data[x] = root(data[x]);
    if(data[x] < 0) {
        return x;
    } else {
        //position[x] = getPosition(x);
        //return (data[x] = root(data[x]));
        return root(data[x]);
    }
  }

  int size(int x) {
    return -data[root(x)];
  }
};

int main() {
    int N, M;
    cin >> N >> M;
    UnionFindPOL ufpol(N+1);

    for(int i=0; i<M; i++) {
        int l, r, d;
        cin >> l >> r >> d;
        if(ufpol.addDist(l, r, d) == false) {
            cout << "No" << endl;
            return 0;
        }
    }
    cout << "Yes" << endl;
    return 0;
}

Submission Info

Submission Time
Task D - People on a Line
User hogeki
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2364 Byte
Status WA
Exec Time 48 ms
Memory 1408 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 400
Status
AC × 5
AC × 27
WA × 20
Set Name Test Cases
Sample sample01.txt, sample02.txt, sample03.txt, sample04.txt, sample05.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, 42.txt, sample01.txt, sample02.txt, sample03.txt, sample04.txt, sample05.txt
Case Name Status Exec Time Memory
01.txt AC 4 ms 1408 KiB
02.txt WA 14 ms 1408 KiB
03.txt AC 34 ms 1408 KiB
04.txt WA 41 ms 1408 KiB
05.txt AC 39 ms 1408 KiB
06.txt WA 23 ms 1408 KiB
07.txt AC 38 ms 1408 KiB
08.txt WA 30 ms 1408 KiB
09.txt WA 14 ms 1408 KiB
10.txt WA 25 ms 1408 KiB
11.txt AC 26 ms 1408 KiB
12.txt AC 16 ms 1408 KiB
13.txt WA 29 ms 1408 KiB
14.txt WA 30 ms 1408 KiB
15.txt AC 26 ms 1408 KiB
16.txt AC 29 ms 1408 KiB
17.txt WA 40 ms 1408 KiB
18.txt WA 16 ms 1408 KiB
19.txt WA 17 ms 1408 KiB
20.txt WA 35 ms 1408 KiB
21.txt AC 34 ms 1408 KiB
22.txt AC 30 ms 1408 KiB
23.txt AC 36 ms 1408 KiB
24.txt AC 25 ms 1408 KiB
25.txt WA 32 ms 1408 KiB
26.txt WA 39 ms 1408 KiB
27.txt WA 47 ms 1408 KiB
28.txt WA 29 ms 1408 KiB
29.txt WA 48 ms 1408 KiB
30.txt WA 26 ms 1408 KiB
31.txt WA 31 ms 1408 KiB
32.txt WA 27 ms 1408 KiB
33.txt AC 39 ms 1408 KiB
34.txt AC 40 ms 1408 KiB
35.txt AC 46 ms 1408 KiB
36.txt AC 29 ms 1408 KiB
37.txt AC 35 ms 1408 KiB
38.txt AC 32 ms 1408 KiB
39.txt AC 42 ms 1408 KiB
40.txt AC 38 ms 1408 KiB
41.txt AC 2 ms 1408 KiB
42.txt AC 4 ms 1408 KiB
sample01.txt AC 1 ms 256 KiB
sample02.txt AC 1 ms 256 KiB
sample03.txt AC 1 ms 256 KiB
sample04.txt AC 1 ms 256 KiB
sample05.txt AC 1 ms 256 KiB