题解 | 隐匿社交网络
隐匿社交网络
https://www.nowcoder.com/practice/2870f9db6aeb4eb08fbd6460397f9bf4
#include <algorithm> #include <climits> #include <iostream> #include <bits/stdc++.h> #include <iterator> #include <set> #include <string> #include <unordered_map> #include <vector> using namespace std; int main() { int T; string s; cin >> T; vector<string> vs; while (T--) { long long t; int n, max = 1; cin >> n; vector<long long> filters; vector<long long> vll(n); for(int i = 0 ;i < n;++i){ cin >> t; vll[i] = t; if(filters.empty()){ filters.emplace_back(t); }else{ bool isMatch = false; for(auto &flt:filters){ if((flt & t) > 0){ flt = flt | t; isMatch = true; } } if(isMatch == false) filters.emplace_back(t); } } for(auto i = 0;i < filters.size();++i){ for(auto j = i + 1; j < filters.size();++j){ if((filters[i] & filters[j]) > 0){ filters[i] = filters[i] | filters[j]; filters[j] = filters[i] | filters[j]; } } } unordered_map<long long, int> ump_cnt; for(int i = 0 ;i < n;++i){ for(int j = 0;j < filters.size();++j){ if((vll[i] & filters[j]) > 0){ ump_cnt[filters[j]]++; break; } } } for(auto c:ump_cnt){ max = max < c.second ? c.second : max; } cout << max << endl; } return 0; } // 64 位输出请用 printf("%lld")