結果

問題 No.1266 7 Colors
ユーザー iqueue02
提出日時 2020-10-24 15:23:31
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 361 ms / 3,000 ms
コード長 1,845 bytes
コンパイル時間 1,899 ms
コンパイル使用メモリ 202,112 KB
最終ジャッジ日時 2025-01-15 15:06:23
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 19
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i = 0; i < (n); i++)
typedef long long ll;
typedef long double ld;
typedef pair<int,int> P;
struct UnionFind{
vector<int> data;
int __size;
UnionFind(int sz) {
data.assign(sz, -1);
__size = sz;
}
bool unite(int x, int y) {
x = find(x), y = find(y);
if(x == y) return (false);
if(data[x] > data[y]) swap(x, y);//
__size--;
data[x] += data[y];
data[y] = x;
return (true);
}
int find(int k) {
if(data[k] < 0) return (k);
return (data[k] = find(data[k]));
}
bool same(int x, int y){
return find(x) == find(y);
}
int size(int k) {
return (-data[find(k)]);
}
int union_count() {
return (__size);
}
};
int main() {
int n, m, q;
cin >> n >> m >> q;
vector<string> s(n);
vector<vector<int>> g(n);
rep(i,n) cin >> s[i];
rep(i,m) {
int u, v;
cin >> u >> v;
u--; v--;
g[u].emplace_back(v);
g[v].emplace_back(u);
}
UnionFind uf(n * 7);
for (int i = 0; i < n; i++) {
for (int j = 0; j < 7; j++) {
if (s[i][j] == '0') continue;
for (auto k : g[i]) if (s[k][j] == '1') uf.unite(i * 7 + j, k * 7 + j);
int a = (j + 1) % 7, b = (j - 1 + 7) % 7;
if (s[i][a] == '1') uf.unite(i * 7 + j, i * 7 + a);
if (s[i][b] == '1') uf.unite(i * 7 + j, i * 7 + b);
}
}
while (q--) {
int t, u, x;
cin >> t >> u >> x;
u--; x--;
if (t == 1) {
s[u][x] = '1';
for (auto v : g[u]) if (s[v][x] == '1') uf.unite(u * 7 + x, v * 7 + x);
int a = (x + 1) % 7, b = (x - 1 + 7) % 7;
if (s[u][a] == '1') uf.unite(u * 7 + x, u * 7 + a);
if (s[u][b] == '1') uf.unite(u * 7 + x, u * 7 + b);
} else {
cout << uf.size(u * 7) << endl;
}
}
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0