結果
問題 | No.1266 7 Colors |
ユーザー |
![]() |
提出日時 | 2020-10-23 23:27:47 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.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 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
#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 1000000007int 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;}