每个测试文件均包含多组测试数据。第一行输入一个整数
代表数据组数,每组测试数据描述如下:
第一行输入一个整数
代表账号数量。
第二行输入
个整数
代表账号权重。
除此之外,保证单个测试文件的
之和不超过
。
对于每组测试数据,新起一行。输出一个整数,代表包含账号数量最多的社交网络中,包含的账号数量。
2 5 2 1 6 7 16 2 2 16
4 1
对于第一组测试数据,连接示意图如下图所示:
// 用例不通过。实在看不出问题在哪 #include <iostream> #include <vector> using namespace std; void calConnected(const vector<long long>& data, vector<vector<bool>>& connected) { int n=data.size(); connected.resize(n, vector<bool>(n, false)); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { connected[i][j] = data[i]&data[j]; } } } long long getAccountNum(vector<long long>& w, int x, vector<vector<bool>>& connected) { long long account_num = 1; for(int i=0; i<w.size(); i++) { if(i!=x && connected[i][x]) account_num++; } return account_num; } long long getMaxAccountNum(vector<long long>& w, vector<vector<bool>>& connected) { int n = w.size(); // vector<bool> visited(n, false); long long max_account_num = 0; for(int i=0; i<w.size(); i++) { // int cur_account_num = getAccountNum(w, i, connected); max_account_num = max(max_account_num, getAccountNum(w, i, connected)); } return max_account_num; } int main() { int T; cin>>T; while(T--) { int n; cin>>n; vector<long long> weight(n); for(long long& x:weight) cin>>x; //题目的空间限制很宽泛。这里预处理任意两个账号的权重 vector<vector<bool>> connected; calConnected(weight, connected); long long max_account_num = getMaxAccountNum(weight, connected); cout<<max_account_num<<endl; } return 0; } // 64 位输出请用 printf("%lld")