Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. SQRT2, Админ, B
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define mp make_pair
  5. #define pb push_back
  6. #define ll long long
  7. #define vi vector<int>
  8. #define vvi vector<vi >
  9. #define all(x) x.begin(), x.end()
  10.  
  11. int n, m, q;
  12. vvi g, f, hi;
  13. vi c, deg, fat, num, hh;
  14.  
  15. int main() {
  16. ios_base::sync_with_stdio(false);
  17. cin >> n >> m >> q;
  18. c.resize(n);
  19. for (int i = 0; i < n; ++i) {
  20. cin >> c[i]; --c[i];
  21. }
  22. g.resize(n);
  23. deg.assign(n, 0);
  24. for (int i = 0; i < m; ++i) {
  25. int a, b; cin >> a >> b; --a; --b;
  26. g[a].pb(b); g[b].pb(a);
  27. ++deg[a]; ++deg[b];
  28. }
  29. fat.resize(n);
  30. for (int i = 0; i < n; ++i)
  31. fat[i] = (deg[i] > 600);
  32.  
  33. hi.resize(n);
  34. num.resize(n);
  35. for (int i = 0; i < n; ++i) {
  36. if (!fat[i]) continue;
  37. num[i] = 0;
  38. hi[i].assign(n, 0);
  39. for (int j = 0; j < g[i].size(); ++j) {
  40. int to = g[i][j];
  41. int cc = c[to];
  42. if ((++hi[i][cc]) == 1)
  43. ++num[i];
  44. }
  45. }
  46. f.resize(n);
  47. for (int i = 0; i < n; ++i) {
  48. for (int j = 0; j < g[i].size(); ++j) {
  49. int to = g[i][j];
  50. if (fat[to]) f[i].pb(to);
  51. }
  52. }
  53. hh.assign(n, 0);
  54. while(q--) {
  55. int type, v; cin >> type >> v; --v;
  56. if (type == 1) {
  57. int col; cin >> col; --col;
  58. for (int i = 0; i < f[v].size(); ++i) {
  59. int to = f[v][i];
  60. if ((--hi[to][c[v]]) == 0) --num[to];
  61. if ((++hi[to][col]) == 1) ++num[to];
  62. }
  63. c[v] = col;
  64. }
  65. else {
  66. if (fat[v])
  67. cout << num[v] << "\n";
  68. else {
  69. int res = 0;
  70. for (int i = 0; i < g[v].size(); ++i) {
  71. int to = g[v][i];
  72. if ((++hh[c[to]]) == 1) ++res;
  73. }
  74. cout << res << "\n";
  75. for (int i = 0; i < g[v].size(); ++i) {
  76. int to = g[v][i];
  77. hh[c[to]] = 0;
  78. }
  79. }
  80. }
  81. }
  82.  
  83. return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement