1 条题解
-
0
Written by @Yue_chen
题意:
给 n 个点, m个操作,
操作一 联通 a b 点(联通是会传递的)
操作二 询问 a b 是否联通
思路:
并查集板子
时间复杂度O(n+m)
AC代码:
#include<bits/stdc++.h> using namespace std; using i64 = long long; int f[10001]; int Find(int x) { if(x == f[x]) return x; return f[x] = Find(f[x]); } void Union(int x, int y) { int fx = Find(x), fy = Find(y); if(fx == fy) return ; f[fx] = fy; } void solve() { int n, m; cin>>n>>m; for(int i=1; i<=n; ++i) f[i] = i; for(int i=1; i<=m; ++i) { int op, a, b; cin>>op>>a>>b; if(op == 1) { T.Union(a, b); }else { if(T.Find(a) == T.Find(b)) { cout<<"Y\n"; }else { cout<<"N\n"; } } } } signed main(void) { ios::sync_with_stdio(false); cin.tie(nullptr); int t=1; //cin>>t; while (t--) solve(); return 0; }
信息
- ID
- 126
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 127
- 已通过
- 23
- 上传者