結果
問題 | No.1266 7 Colors |
ユーザー |
|
提出日時 | 2020-10-24 00:52:11 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 172 ms / 3,000 ms |
コード長 | 2,852 bytes |
コンパイル時間 | 2,632 ms |
コンパイル使用メモリ | 202,120 KB |
最終ジャッジ日時 | 2025-01-15 14:48:02 |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
// g++ A.cpp -std=c++14 -I . && ./a.out#include <bits/stdc++.h>using namespace std;#define rep(i, n) for (int i = 0; i < (int)(n); i++)#define rep2(i, a, b) for (int i = a; i < (int)(b); i++)#define all(v) v.begin(), v.end()using ll = long long;const ll INF = 1e18;// 変数定義int N, M, Q, a, b, c, d, e, x, y, t, T, total, cnt, ans;struct dsu{public:dsu() : _n(0) {}dsu(int n) : _n(n), parent_or_size(n, -1) {}int merge(int a, int b){assert(0 <= a && a < _n);assert(0 <= b && b < _n);int x = leader(a), y = leader(b);if (x == y)return x;if (-parent_or_size[x] < -parent_or_size[y])swap(x, y);parent_or_size[x] += parent_or_size[y];parent_or_size[y] = x;return x;}bool same(int a, int b){assert(0 <= a && a < _n);assert(0 <= b && b < _n);return leader(a) == leader(b);}int leader(int a){assert(0 <= a && a < _n);if (parent_or_size[a] < 0)return a;return parent_or_size[a] = leader(parent_or_size[a]);}int size(int a){assert(0 <= a && a < _n);return -parent_or_size[leader(a)];}vector<vector<int>> groups(){vector<int> leader_buf(_n), group_size(_n);for (int i = 0; i < _n; i++){leader_buf[i] = leader(i);group_size[leader_buf[i]]++;}vector<vector<int>> result(_n);for (int i = 0; i < _n; i++){result[i].reserve(group_size[i]);}for (int i = 0; i < _n; i++){result[leader_buf[i]].push_back(i);}result.erase(remove_if(result.begin(), result.end(),[&](const vector<int> &v) { return v.empty(); }),result.end());return result;}private:int _n;// root node: -1 * component size// otherwise: parentvector<int> parent_or_size;};int main(){ios::sync_with_stdio(false);cin.tie(nullptr);cin >> N >> M >> Q;dsu uf(N * 7);vector<string> S(N);rep(i, N){cin >> S[i];rep(j, 7){if (S[i][j] == '1' && S[i][(j + 1) % 7] == '1')uf.merge(i * 7 + j, i * 7 + (j + 1) % 7);}}vector<vector<int>> edge(N);rep(i, M){cin >> x >> y;x--;y--;edge[x].push_back(y);edge[y].push_back(x);rep(j, 7){if (S[x][j] == '1' && S[y][j] == '1')uf.merge(x * 7 + j, y * 7 + j);}}rep(i, Q){cin >> t >> a >> b;a--;b--;if (t == 1){S[a][b] = '1';if (S[a][(b + 6) % 7] == '1')uf.merge(a * 7 + (b + 6) % 7, a * 7 + b);if (S[a][(b + 1) % 7] == '1')uf.merge(a * 7 + (b + 1) % 7, a * 7 + b);for (auto v : edge[a]){if (S[v][b] == '1')uf.merge(a * 7 + b, v * 7 + b);}}else{cout << uf.size(a * 7) << '\n';}}return 0;}