Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.49 KB | None | 0 0
  1. SQRT2, Даша, B
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #pragma comment(linker, "/STACK:66777216")
  4. #include <iostream>
  5. #include <iomanip>
  6. #include <algorithm>
  7. #include <cmath>
  8. #include <vector>
  9. #include <string>
  10. #include <map>
  11. #include <set>
  12. #include <queue>
  13. #include <bitset>
  14. #define endl "\n"
  15. using namespace std;
  16. typedef long long ll;
  17. typedef unsigned long long ull;
  18. typedef pair <int, int> pii;
  19. typedef pair <int, ll> pil;
  20. typedef pair <ll, ll> pll;
  21. typedef vector <int> vi;
  22. typedef vector <ll> vll;
  23. typedef vector <string> vstr;
  24. typedef vector < vector <int> > vvi;
  25. typedef vector < vector <ll> > vvll;
  26. int inf = 1e9 + 7;
  27. ll INF = 1e18;
  28. int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
  29.  
  30. vector <int> color, fat, h, fat_ans;
  31. vector <vector <int> > g, f, fh;
  32.  
  33. int main() {
  34. ios_base::sync_with_stdio(false);
  35. #ifdef _DEBUG
  36. freopen("input.txt", "r", stdin);
  37. freopen("output.txt", "w", stdout);
  38. #endif
  39. int n, m, q;
  40. cin >> n >> m >> q;
  41. g.resize(n);
  42. f.resize(n);
  43. color.resize(n, 0);
  44. fat.resize(n, 0); //index to fh + 1
  45. h.assign(n + 1, 0);
  46. fat_ans.assign(n, 0);
  47. fh.resize(n);
  48. for (int i = 0; i < n; i++)
  49. cin >> color[i];
  50. for (int i = 0; i < m; i++) {
  51. int a, b;
  52. cin >> a >> b;
  53. a--; b--;
  54. g[a].push_back(b);
  55. g[b].push_back(a);
  56. }
  57. int k = 200; //sqrt(m + 0.5)
  58. for (int v = 0; v < n; v++) {
  59. if (g[v].size() > k) {
  60. fat[v] = 1;
  61. fh[v].assign(n + 1, 0);
  62. for (int i = 0; i < g[v].size(); i++) {
  63. int to = g[v][i];
  64. if (fh[v][color[to]] == 0)
  65. fat_ans[v]++;
  66. fh[v][color[to]]++;
  67. } //create h for fat v
  68. } //if v is fat
  69. for (int i = 0; i < g[v].size(); i++) {
  70. int to = g[v][i];
  71. if (g[to].size() > k)
  72. f[v].push_back(to);
  73. } //fat naib for v
  74. } //fat vs
  75. while (q > 0) {
  76. int t;
  77. cin >> t;
  78. if (t == 1) {
  79. int v, c;
  80. cin >> v >> c;
  81. v--;
  82. for (int i = 0; i < f[v].size(); i++) {
  83. int to = f[v][i];
  84. fh[to][color[v]]--;
  85. if (fh[to][color[v]] == 0)
  86. fat_ans[to]--;
  87. if (fh[to][c] == 0)
  88. fat_ans[to]++;
  89. fh[to][c]++;
  90. }
  91. color[v] = c;
  92. }
  93. else {
  94. int v;
  95. cin >> v;
  96. v--;
  97. if (fat[v] == 1)
  98. cout << fat_ans[v] << endl;
  99. else {
  100. int ans = 0;
  101. for (int i = 0; i < g[v].size(); i++) {
  102. int to = g[v][i];
  103. if (h[color[to]] == 0)
  104. ans++;
  105. h[color[to]]++;
  106. }
  107. cout << ans << endl;
  108. for (int i = 0; i < g[v].size(); i++) {
  109. int to = g[v][i];
  110. h[color[to]] = 0;
  111. }
  112. }
  113. }
  114. q--;
  115. }
  116. return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement