Submission #1175923
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() == 0) continue; if (uf.size(ca[i][0][0]) == 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) { 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 | 800 |
Code Size | 3657 Byte |
Status | AC |
Exec Time | 107 ms |
Memory | 29568 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 800 / 800 | ||||
Status |
|
|
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 | 1 ms | 256 KB |
0_01.txt | AC | 1 ms | 256 KB |
0_02.txt | AC | 1 ms | 256 KB |
0_03.txt | AC | 1 ms | 256 KB |
0_04.txt | AC | 1 ms | 256 KB |
1_00.txt | AC | 7 ms | 7296 KB |
1_01.txt | AC | 7 ms | 7296 KB |
1_02.txt | AC | 7 ms | 7296 KB |
1_03.txt | AC | 7 ms | 7296 KB |
1_04.txt | AC | 6 ms | 7296 KB |
1_05.txt | AC | 5 ms | 6912 KB |
1_06.txt | AC | 50 ms | 19072 KB |
1_07.txt | AC | 54 ms | 19072 KB |
1_08.txt | AC | 82 ms | 23804 KB |
1_09.txt | AC | 81 ms | 23804 KB |
1_10.txt | AC | 94 ms | 25600 KB |
1_11.txt | AC | 76 ms | 24832 KB |
1_12.txt | AC | 107 ms | 29568 KB |
1_13.txt | AC | 86 ms | 29568 KB |
1_14.txt | AC | 105 ms | 29568 KB |
1_15.txt | AC | 105 ms | 29568 KB |
1_16.txt | AC | 100 ms | 27648 KB |
1_17.txt | AC | 99 ms | 28544 KB |
1_18.txt | AC | 96 ms | 28672 KB |
1_19.txt | AC | 95 ms | 27776 KB |
1_20.txt | AC | 59 ms | 16896 KB |
1_21.txt | AC | 22 ms | 7936 KB |
1_22.txt | AC | 5 ms | 2432 KB |
1_23.txt | AC | 53 ms | 15872 KB |
1_24.txt | AC | 86 ms | 20608 KB |
1_25.txt | AC | 53 ms | 15232 KB |
1_26.txt | AC | 6 ms | 1920 KB |
1_27.txt | AC | 11 ms | 6528 KB |
1_28.txt | AC | 92 ms | 22016 KB |
1_29.txt | AC | 25 ms | 8704 KB |
1_30.txt | AC | 100 ms | 24576 KB |
1_31.txt | AC | 30 ms | 11904 KB |
1_32.txt | AC | 87 ms | 21504 KB |
1_33.txt | AC | 99 ms | 24336 KB |
1_34.txt | AC | 11 ms | 5248 KB |
1_35.txt | AC | 84 ms | 20480 KB |
1_36.txt | AC | 12 ms | 4480 KB |
1_37.txt | AC | 34 ms | 9472 KB |
1_38.txt | AC | 61 ms | 18176 KB |
1_39.txt | AC | 18 ms | 7680 KB |
1_40.txt | AC | 58 ms | 15488 KB |
1_41.txt | AC | 26 ms | 11136 KB |
1_42.txt | AC | 70 ms | 22400 KB |
1_43.txt | AC | 49 ms | 14848 KB |
1_44.txt | AC | 66 ms | 16896 KB |
1_45.txt | AC | 21 ms | 9600 KB |
1_46.txt | AC | 82 ms | 22528 KB |
1_47.txt | AC | 36 ms | 12544 KB |
1_48.txt | AC | 23 ms | 6912 KB |
1_49.txt | AC | 8 ms | 4096 KB |
1_50.txt | AC | 40 ms | 11520 KB |
1_51.txt | AC | 67 ms | 21888 KB |
1_52.txt | AC | 8 ms | 6656 KB |
1_53.txt | AC | 13 ms | 7296 KB |
1_54.txt | AC | 21 ms | 7040 KB |
1_55.txt | AC | 32 ms | 8320 KB |
1_56.txt | AC | 42 ms | 13952 KB |
1_57.txt | AC | 80 ms | 24832 KB |
1_58.txt | AC | 63 ms | 17920 KB |
1_59.txt | AC | 7 ms | 4864 KB |
1_60.txt | AC | 1 ms | 256 KB |
1_61.txt | AC | 1 ms | 256 KB |
1_62.txt | AC | 1 ms | 256 KB |
1_63.txt | AC | 1 ms | 256 KB |