文章
31
粉丝
0
获赞
114
访问
3.8k
#include<bits/stdc++.h>
using namespace std;
const int N = 5000;
int fa[N];
int find(int x){
if(x == fa[x]) return x;
return fa[x] = find(fa[x]);
}
void merge_set(int x, int y){
int a = find(x), b = find(y);
if(a == b) return;
fa[a] = b;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
while(cin >> n >> m){
// DSU 按 “输入下标” 建点:0..m-1
for(int i = 0; i < m; i++) fa[i] = i;
vector<int> vc(m);
for(int i = 0; i < m; i++) cin >> vc[i];
for(int i = 0; i < m; i++){
for(int j = i + 1; j < m; j++){
if( (vc[i] & vc[j]) == 0 ) merge_set(i, j); // ✅ 合并下标,不要合并数值
}
}
set<int> st;
for(int i = 0; i < m; i++) st.insert(find(i));
cout << st.size() << "\n";
}
return 0;
}
登录后发布评论
暂无评论,来抢沙发