题解 | 隐匿社交网络

隐匿社交网络

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")

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务