文章

31

粉丝

0

获赞

114

访问

3.8k

头像
graph's connected components(弱化版) 无敌了这题样例还有重复值题解:
P1687 中南大学机试题
发布于2026年3月4日 22:35
阅读数 95

#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;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发