Submission #1175919


Source Code Expand

#include <algorithm>
#include <cassert>
#include <cfloat>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <deque>
#include <iostream>
#include <limits>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <vector>
 
#define FOR(i,k,n) for (int (i)=(k); (i)<(n); ++(i))
#define rep(i,n) FOR(i,0,n)
#define all(v) begin(v), end(v)
#define debug(x) cerr<< #x <<": "<<x<<endl
#define debug2(x,y) cerr<< #x <<": "<< x <<", "<< #y <<": "<< y <<endl
 
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<vector<int> > vvi;
typedef vector<ll> vll;
typedef vector<vector<ll> > vvll;
typedef deque<bool> db;
template<class T> using vv=vector<vector< T > >;

class UF {
private:
  vector<int> data; // parent or size
  vector<int> next;
  vector<int> last;
  void init(int n) {
    data.assign(n, -1);
    next.assign(n, -1);
    last.resize(n);
    for (int i = 0; i < n; ++i) {
      last[i] = i;
    }
  }

public:
  UF() {}
  UF(int n) {
    init(n);
  }
  int root(int x) {
    if (data[x] < 0) return x;
    return data[x] = root(data[x]);
  }
  bool unite(int x, int y) {
    x = root(x);
    y = root(y);
    if (x == y) return false;
    if (data[x] > data[y]) swap(x, y); // data[x] and data[y] are negative.
    data[x] += data[y];
    data[y] = x;
    next[last[x]] = y;
    last[x] = last[y];
    return true;
  }
  int size(int x) {
    return -data[root(x)];
  }
  bool same(int x, int y) {
    return root(x) == root(y);
  }
  int get_next(int x) {
    return next[x];
  }
};

ll INF = 2e15;

vector<vvi> g;
vll offset;

void dfs(int u) {
  for (vi v_d : g[u]) {
    ll s = offset[u] + v_d[1];
    if (offset[v_d[0]] == INF) {
      offset[v_d[0]] = s;
      dfs(v_d[0]);
    } else if (offset[v_d[0]] != s) {
      printf("No\n");
      exit(0);
    }
  }
}

int main() {
  int r, c;
  scanf("%d%d", &r, &c);
  g.resize(c);
  int n;
  scanf("%d", &n);
  vvi rca(n, vi(3));
  vv<vi> ca(r);
  rep (i, n) {
    int ri, ci, ai;
    scanf("%d%d%d", &ri, &ci, &ai);
    ri -= 1;
    ci -= 1;
    ca[ri].push_back((vi){ci, ai});
  }
  rep (i, r) {
    sort(all(ca[i]));
  }
  rep (i, r) {
    FOR (j, 1, (int)ca[i].size()) {
      g[ca[i][0][0]].push_back((vi){ca[i][j][0], ca[i][j][1] - ca[i][0][1]});
      g[ca[i][j][0]].push_back((vi){ca[i][0][0], ca[i][0][1] - ca[i][j][1]});
    }
  }

  UF uf(c);
  rep (i, r) {
    rep (j, (int)ca[i].size() - 1) {
      uf.unite(ca[i][j][0], ca[i][j+1][0]);
    }
  }

  offset.assign(c, INF);
  rep (i, c) {
    if (uf.size(i) == 1) continue;
    if (offset[i] == INF) {
      offset[i] = 0;
      dfs(i);
    }
  }

  vi roots;
  vi root_minc(c, c+10);
  rep (i, c) {
    if (uf.size(i) == 1) continue;
    roots.push_back(uf.root(i));
  }
  sort(all(roots));
  roots.erase(unique(all(roots)), roots.end());
  for (int root : roots) {
    int x = root;
    root_minc[root] = x;
    for (/*x = uf.root(x)*/; x != -1; x = uf.get_next(x)) {
      if (offset[root_minc[root]] > offset[x]) {
        root_minc[root] = x;
      }
    }
  }

  rep (i, r) {
    if (ca[i].size() <= 1) continue;
    int min_c = root_minc[uf.root(ca[i][0][0])];
    //if (min_c == c+10) continue;
    if (ca[i][0][1] + offset[min_c] - offset[ca[i][0][0]] < 0) {
      debug(i);
      printf("No\n");
      return 0;
    }
  }

  printf("Yes\n");

  return 0;
}

Submission Info

Submission Time
Task D - Grid and Integers
User tspcx
Language C++14 (Clang 3.8.0)
Score 0
Code Size 3628 Byte
Status WA
Exec Time 121 ms
Memory 29568 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 800
Status
AC × 4
WA × 1
AC × 62
WA × 7
Set Name Test Cases
Sample 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt, 0_04.txt
All 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt, 0_04.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt, 1_20.txt, 1_21.txt, 1_22.txt, 1_23.txt, 1_24.txt, 1_25.txt, 1_26.txt, 1_27.txt, 1_28.txt, 1_29.txt, 1_30.txt, 1_31.txt, 1_32.txt, 1_33.txt, 1_34.txt, 1_35.txt, 1_36.txt, 1_37.txt, 1_38.txt, 1_39.txt, 1_40.txt, 1_41.txt, 1_42.txt, 1_43.txt, 1_44.txt, 1_45.txt, 1_46.txt, 1_47.txt, 1_48.txt, 1_49.txt, 1_50.txt, 1_51.txt, 1_52.txt, 1_53.txt, 1_54.txt, 1_55.txt, 1_56.txt, 1_57.txt, 1_58.txt, 1_59.txt, 1_60.txt, 1_61.txt, 1_62.txt, 1_63.txt
Case Name Status Exec Time Memory
0_00.txt AC 5 ms 632 KB
0_01.txt AC 1 ms 256 KB
0_02.txt WA 1 ms 256 KB
0_03.txt AC 1 ms 256 KB
0_04.txt AC 1 ms 256 KB
1_00.txt AC 6 ms 7296 KB
1_01.txt AC 6 ms 7296 KB
1_02.txt AC 6 ms 7296 KB
1_03.txt WA 7 ms 7296 KB
1_04.txt AC 7 ms 7296 KB
1_05.txt AC 5 ms 6912 KB
1_06.txt AC 55 ms 19072 KB
1_07.txt AC 57 ms 19072 KB
1_08.txt AC 92 ms 23804 KB
1_09.txt WA 88 ms 23804 KB
1_10.txt AC 107 ms 25600 KB
1_11.txt AC 88 ms 24832 KB
1_12.txt AC 120 ms 29568 KB
1_13.txt AC 97 ms 29568 KB
1_14.txt AC 119 ms 29568 KB
1_15.txt AC 121 ms 29568 KB
1_16.txt AC 110 ms 27648 KB
1_17.txt AC 110 ms 28544 KB
1_18.txt AC 111 ms 28672 KB
1_19.txt AC 115 ms 27776 KB
1_20.txt AC 63 ms 16896 KB
1_21.txt AC 22 ms 7936 KB
1_22.txt AC 5 ms 2432 KB
1_23.txt AC 56 ms 15872 KB
1_24.txt AC 93 ms 20608 KB
1_25.txt AC 61 ms 15232 KB
1_26.txt AC 6 ms 1920 KB
1_27.txt AC 11 ms 6528 KB
1_28.txt AC 106 ms 22016 KB
1_29.txt AC 25 ms 8704 KB
1_30.txt AC 103 ms 24448 KB
1_31.txt AC 30 ms 11904 KB
1_32.txt AC 96 ms 21504 KB
1_33.txt AC 107 ms 24336 KB
1_34.txt AC 11 ms 5248 KB
1_35.txt AC 99 ms 20480 KB
1_36.txt AC 11 ms 4480 KB
1_37.txt AC 35 ms 9472 KB
1_38.txt AC 80 ms 18176 KB
1_39.txt AC 18 ms 7680 KB
1_40.txt AC 61 ms 15488 KB
1_41.txt AC 27 ms 11136 KB
1_42.txt AC 78 ms 22400 KB
1_43.txt AC 55 ms 14848 KB
1_44.txt WA 77 ms 16896 KB
1_45.txt AC 22 ms 9600 KB
1_46.txt AC 101 ms 22528 KB
1_47.txt AC 38 ms 12544 KB
1_48.txt AC 24 ms 6912 KB
1_49.txt AC 8 ms 4096 KB
1_50.txt AC 44 ms 11520 KB
1_51.txt AC 78 ms 21888 KB
1_52.txt AC 8 ms 6656 KB
1_53.txt AC 13 ms 7296 KB
1_54.txt AC 22 ms 7040 KB
1_55.txt AC 32 ms 8320 KB
1_56.txt AC 44 ms 13952 KB
1_57.txt AC 90 ms 24832 KB
1_58.txt WA 66 ms 17920 KB
1_59.txt AC 7 ms 4864 KB
1_60.txt WA 1 ms 256 KB
1_61.txt WA 1 ms 256 KB
1_62.txt AC 1 ms 256 KB
1_63.txt AC 1 ms 256 KB