結果
問題 | No.1266 7 Colors |
ユーザー | ocvret_ |
提出日時 | 2020-10-23 23:27:47 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 331 ms / 3,000 ms |
コード長 | 1,723 bytes |
コンパイル時間 | 1,844 ms |
コンパイル使用メモリ | 177,792 KB |
実行使用メモリ | 17,808 KB |
最終ジャッジ日時 | 2024-07-21 13:23:52 |
合計ジャッジ時間 | 8,552 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,816 KB |
testcase_01 | AC | 2 ms
6,940 KB |
testcase_02 | AC | 2 ms
6,940 KB |
testcase_03 | AC | 253 ms
6,944 KB |
testcase_04 | AC | 320 ms
13,156 KB |
testcase_05 | AC | 250 ms
6,940 KB |
testcase_06 | AC | 319 ms
14,324 KB |
testcase_07 | AC | 327 ms
16,008 KB |
testcase_08 | AC | 314 ms
13,480 KB |
testcase_09 | AC | 297 ms
11,044 KB |
testcase_10 | AC | 287 ms
10,240 KB |
testcase_11 | AC | 262 ms
7,808 KB |
testcase_12 | AC | 264 ms
8,448 KB |
testcase_13 | AC | 288 ms
9,216 KB |
testcase_14 | AC | 262 ms
6,944 KB |
testcase_15 | AC | 327 ms
16,248 KB |
testcase_16 | AC | 285 ms
8,704 KB |
testcase_17 | AC | 331 ms
15,592 KB |
testcase_18 | AC | 279 ms
17,808 KB |
testcase_19 | AC | 166 ms
17,412 KB |
testcase_20 | AC | 168 ms
17,440 KB |
testcase_21 | AC | 233 ms
6,940 KB |
ソースコード
#include<bits/stdc++.h> //#include<atcoder/all> using namespace std; //using namespace atcoder; using ll = long long; using ull = unsigned long long; using P = pair<int,int>; #define rep(i,n) for(ll i = 0;i < (ll)n;i++) #define ALL(x) (x).begin(),(x).end() #define MOD 1000000007 int nu(int i,int j){ return 7*i+j; } class UnionFind{ public: vector<ll> par; UnionFind(ll size) : par(size,-1){} bool unite(ll x,ll y){ x = root(x),y = root(y); if(x == y)return false; if(par[y] < par[x])swap(x,y); par[x] += par[y]; par[y] = x; return true; } bool find(ll x,ll y){ return root(x) == root(y); } ll root(ll x){ return par[x] < 0 ? x : par[x] = root(par[x]); } ll size(ll x){ return -par[root(x)]; } }; int main(){ int n,m,Q; cin >> n >> m >> Q; vector<string> s(n); rep(i,n)cin >> s[i]; UnionFind uf(7*n); rep(i,n){ rep(j,6)if(s[i][j] == '1' && s[i][j+1] == '1')uf.unite(nu(i,j),nu(i,j+1)); if(s[i][0] == '1' && s[i][6] == '1')uf.unite(nu(i,0),nu(i,6)); } vector<vector<int>> vv(n); rep(i,m){ int v,u;cin >> v >> u; v--;u--; vv[v].push_back(u); vv[u].push_back(v); rep(j,7)if(s[v][j] == '1' && s[u][j] == '1')uf.unite(nu(v,j),nu(u,j)); } while(Q--){ int T,x,y;cin >> T >> x >> y; x--;y--; if(T == 1){ s[x][y] = '1'; for(auto au : vv[x]){ if(s[au][y] == '1')uf.unite(nu(x,y),nu(au,y)); } if(s[x][(y+1)%7] == '1')uf.unite(nu(x,y),nu(x,(y+1)%7)); if(s[x][(y-1+7)%7] == '1')uf.unite(nu(x,y),nu(x,(y-1+7)%7)); }else{ int res = uf.size(nu(x,0)); cout << res << "\n"; } } return 0; }