3 条题解
-
0
就是多了一步合并敌人的敌人,别的基本就是板子 建议训练: 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
- 上传者