Advertisement
skimono

Untitled

Oct 27th, 2022
1,118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.76 KB | None | 0 0
  1. // clang-format off
  2. #define _CRT_SECURE_NO_WARNINGS
  3.  
  4. #include <iostream>
  5. #include <vector>
  6. #include <string>
  7. #include <algorithm>
  8. #include <cmath>
  9. #include <stack>
  10. #include <iomanip>
  11. #include <fstream>
  12. #include <string>
  13. #include <set>
  14. #include <deque>
  15. #include <queue>
  16. #include <map>
  17. #include <bitset>
  18. #include <random>
  19. #include <list>
  20. #include <unordered_map>
  21. #include <unordered_set>
  22. #include <cassert>
  23.  
  24. using namespace std;
  25.  
  26. typedef long long ll;
  27. typedef unsigned long long ull;
  28. typedef long double ld;
  29. typedef string str;
  30. //typedef __int128 ultraint;
  31. #define sqrt sqrtl
  32. #define F first
  33. #define S second
  34. #define endl '\n'
  35. #define all(vc666) vc666.begin(), vc666.end()
  36. #define allr(vc666) vc666.rbegin(), vc666.rend()
  37. #define int long long
  38.  
  39. const ll INF = (ll)1e18 + 7;
  40. const ll inf = 1e9 + 7;
  41. const ll ONE = 1;
  42. const ll MOD = (ONE << 32) - 1;
  43. const ll max_sz = 1e7 + 1;
  44. ld EPS = 1e-6;
  45. ld PI = 3.1415926535897932384;
  46. mt19937_64 gen(time(0));
  47.  
  48. struct Elem {
  49.     int value, cnt;
  50. };
  51.  
  52. bool cmp(const Elem& a, const Elem& b) {
  53.     return a.value > b.value;
  54. }
  55.  
  56. void solve() {
  57.     int n, m, i, x, y, sup;
  58.     cin >> n >> m;
  59.     vector <int> elems(n);
  60.     unordered_map <int, int> cnt;
  61.     for (i = 0; i < n; i++) {
  62.         cin >> elems[i];
  63.         cnt[elems[i]]++;
  64.     }
  65.     sort(all(elems));
  66.     elems.erase(unique(all(elems)), elems.end());
  67.     unordered_map <int, int> idx;
  68.     for (i = 0; i < (int)elems.size(); i++) {
  69.         idx[elems[i]] = i;
  70.     }
  71.     vector <unordered_map <int, bool> > ban(elems.size());
  72.     for (i = 0; i < m; i++) {
  73.         cin >> x >> y;
  74.         x = idx[x];
  75.         y = idx[y];
  76.         ban[x][y] = 1;
  77.         ban[y][x] = 1;
  78.     }
  79.     vector <vector <Elem> > keys(n + 1);
  80.     for (auto& it : cnt) {
  81.         keys[it.second].push_back({ it.first, it.second });
  82.     }
  83.     vector <int> keys2;
  84.     for (i = n; i > 0; i--) {
  85.         if (keys[i].size() > 0) {
  86.             sort(all(keys[i]), cmp);
  87.             keys2.push_back(i);
  88.         }
  89.     }
  90.     ll ans = 0;
  91.     for (auto val : elems) {
  92.         sup = cnt[val];
  93.         // val - value
  94.         // sup - cnt
  95.         x = idx[val];
  96.         for (auto& it : keys2) {
  97.             for (auto& it2 : keys[it]) {
  98.                 if (val != it2.value && !ban[x][idx[it2.value]]) {
  99.                     ans = max(ans, (ll)(sup + it2.cnt) * (ll)(val + it2.value));
  100.                     break;
  101.                 }
  102.             }
  103.         }
  104.     }
  105.     cout << ans << endl;
  106. }
  107.  
  108.  
  109. signed main() {
  110. #ifdef _DEBUG
  111.     freopen("input.txt", "r", stdin);
  112.     freopen("output.txt", "w", stdout);
  113. #endif
  114.     ios_base::sync_with_stdio(0);
  115.     cin.tie(NULL);
  116.     cout.tie(NULL);
  117.     int t = 1;
  118.     cin >> t;
  119.     while (t--) {
  120.         solve();
  121.     }
  122. }
  123. //Deisgned by skimono
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement