Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SQRT2, Админ, B
- #include<bits/stdc++.h>
- using namespace std;
- #define mp make_pair
- #define pb push_back
- #define ll long long
- #define vi vector<int>
- #define vvi vector<vi >
- #define all(x) x.begin(), x.end()
- int n, m, q;
- vvi g, f, hi;
- vi c, deg, fat, num, hh;
- int main() {
- ios_base::sync_with_stdio(false);
- cin >> n >> m >> q;
- c.resize(n);
- for (int i = 0; i < n; ++i) {
- cin >> c[i]; --c[i];
- }
- g.resize(n);
- deg.assign(n, 0);
- for (int i = 0; i < m; ++i) {
- int a, b; cin >> a >> b; --a; --b;
- g[a].pb(b); g[b].pb(a);
- ++deg[a]; ++deg[b];
- }
- fat.resize(n);
- for (int i = 0; i < n; ++i)
- fat[i] = (deg[i] > 600);
- hi.resize(n);
- num.resize(n);
- for (int i = 0; i < n; ++i) {
- if (!fat[i]) continue;
- num[i] = 0;
- hi[i].assign(n, 0);
- for (int j = 0; j < g[i].size(); ++j) {
- int to = g[i][j];
- int cc = c[to];
- if ((++hi[i][cc]) == 1)
- ++num[i];
- }
- }
- f.resize(n);
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < g[i].size(); ++j) {
- int to = g[i][j];
- if (fat[to]) f[i].pb(to);
- }
- }
- hh.assign(n, 0);
- while(q--) {
- int type, v; cin >> type >> v; --v;
- if (type == 1) {
- int col; cin >> col; --col;
- for (int i = 0; i < f[v].size(); ++i) {
- int to = f[v][i];
- if ((--hi[to][c[v]]) == 0) --num[to];
- if ((++hi[to][col]) == 1) ++num[to];
- }
- c[v] = col;
- }
- else {
- if (fat[v])
- cout << num[v] << "\n";
- else {
- int res = 0;
- for (int i = 0; i < g[v].size(); ++i) {
- int to = g[v][i];
- if ((++hh[c[to]]) == 1) ++res;
- }
- cout << res << "\n";
- for (int i = 0; i < g[v].size(); ++i) {
- int to = g[v][i];
- hh[c[to]] = 0;
- }
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement