Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SQRT2, Даша, B
- #define _CRT_SECURE_NO_WARNINGS
- #pragma comment(linker, "/STACK:66777216")
- #include <iostream>
- #include <iomanip>
- #include <algorithm>
- #include <cmath>
- #include <vector>
- #include <string>
- #include <map>
- #include <set>
- #include <queue>
- #include <bitset>
- #define endl "\n"
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef pair <int, int> pii;
- typedef pair <int, ll> pil;
- typedef pair <ll, ll> pll;
- typedef vector <int> vi;
- typedef vector <ll> vll;
- typedef vector <string> vstr;
- typedef vector < vector <int> > vvi;
- typedef vector < vector <ll> > vvll;
- int inf = 1e9 + 7;
- ll INF = 1e18;
- int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
- vector <int> color, fat, h, fat_ans;
- vector <vector <int> > g, f, fh;
- int main() {
- ios_base::sync_with_stdio(false);
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- int n, m, q;
- cin >> n >> m >> q;
- g.resize(n);
- f.resize(n);
- color.resize(n, 0);
- fat.resize(n, 0); //index to fh + 1
- h.assign(n + 1, 0);
- fat_ans.assign(n, 0);
- fh.resize(n);
- for (int i = 0; i < n; i++)
- cin >> color[i];
- for (int i = 0; i < m; i++) {
- int a, b;
- cin >> a >> b;
- a--; b--;
- g[a].push_back(b);
- g[b].push_back(a);
- }
- int k = 200; //sqrt(m + 0.5)
- for (int v = 0; v < n; v++) {
- if (g[v].size() > k) {
- fat[v] = 1;
- fh[v].assign(n + 1, 0);
- for (int i = 0; i < g[v].size(); i++) {
- int to = g[v][i];
- if (fh[v][color[to]] == 0)
- fat_ans[v]++;
- fh[v][color[to]]++;
- } //create h for fat v
- } //if v is fat
- for (int i = 0; i < g[v].size(); i++) {
- int to = g[v][i];
- if (g[to].size() > k)
- f[v].push_back(to);
- } //fat naib for v
- } //fat vs
- while (q > 0) {
- int t;
- cin >> t;
- if (t == 1) {
- int v, c;
- cin >> v >> c;
- v--;
- for (int i = 0; i < f[v].size(); i++) {
- int to = f[v][i];
- fh[to][color[v]]--;
- if (fh[to][color[v]] == 0)
- fat_ans[to]--;
- if (fh[to][c] == 0)
- fat_ans[to]++;
- fh[to][c]++;
- }
- color[v] = c;
- }
- else {
- int v;
- cin >> v;
- v--;
- if (fat[v] == 1)
- cout << fat_ans[v] << endl;
- else {
- int ans = 0;
- for (int i = 0; i < g[v].size(); i++) {
- int to = g[v][i];
- if (h[color[to]] == 0)
- ans++;
- h[color[to]]++;
- }
- cout << ans << endl;
- for (int i = 0; i < g[v].size(); i++) {
- int to = g[v][i];
- h[color[to]] = 0;
- }
- }
- }
- q--;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement