3 条题解

  • 0
    @ 2023-4-15 14:50:46

    就是多了一步合并敌人的敌人,别的基本就是板子 建议训练: tzhsojor洛谷连接(这两是一道题

    #include <bits/stdc++.h>
    #define int long long int
    
    using namespace std;
    
    const int N = 2e5 + 7;
    int n,m;
    int fa[N << 1],e[N];
    
    inline int read(){
    	int x = 0,f = 1;
    	char c = getchar();
    	for(;!isdigit(c);c = getchar())
    		if(c == '-')f = -1;
    	for(;isdigit(c);c = getchar())
    		x = (x << 1) + (x << 3) + c - '0';
    	return x * f;
    }
    
    int get(int x){
    	if(fa[x] == x)return x;
    	return fa[x] = get(fa[x]);
    }
    
    void merge(int x,int y){
    	x = get(x);
    	y = get(y);
    	fa[x] = y;
    }
    
    void print(int x,int y){
    	if(get(x) == get(y)) printf("Y\n");
    	else printf("N\n");
    }
    
    signed main(){
    	n = read();m = read();
    	
    	for(int i = 1;i <= n;i ++){
    		fa[i] = i;
    		fa[i + n] = i + n;
    	}
    	
    	for(int i = 1;i <= m;i ++){
    		int p = read(),x = read(),y = read();
    		if(!p) merge(x,y);
    		else{
    			if(!e[x]) e[x] = y;
    			else{
    				merge(e[x],y);
    			}
    			if(!e[y]) e[y] = x;
    			else{
    				merge(e[y],x);
    			}
    		}
    	}
    	
    	int tot = 0;
    	
    	for(int i = 1;i <= n;i ++) if(fa[i] == i) tot++;
    	printf("%lld",tot);
    	
    	return 0;
    }
    

    信息

    ID
    395
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    6
    已通过
    4
    上传者