1 条题解
-
1
#pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") /* @ mch @ Mar @ problem from:[NOI2002] 银河英雄传说 */ #include <bits/stdc++.h> using namespace std; typedef signed long long s64; using u32 = unsigned int; using u64 = unsigned long long; #define lod long double #define int long long #define FastIO ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr) #define PII pair<int,int> #ifdef __linux__ #define gc getchar #define pc putchar #endif #define bdy 30000 #define rep(i,n) for(int i = 1;i <= n;++i) #define rep2(j,i) for (int j = i - 1; j >= 1; --j) #define debug(x) cout << #x << " : " << x << "\n"; #define debug2(x,y) cout << #x << " : " << x << " " << #y << " : " << y << "\n"; const int N = 3e4+5; int father[N]; int size1[N], d[N]; int find(int x) { if (x == father[x]) return x; int root = find(father[x]); d[x] = d[x] + d[father[x]]; father[x] = root; return father[x]; } void merge(int a, int b) { a = find(a), b = find(b); d[a] = size1[b]; size1[b] += size1[a]; father[a] = b; } void solve(void) { [&](void) -> void { int t; cin >> t; for (int i = 1; i <= bdy; ++i) father[i] = i, size1[i] = 1; while (t--) { char c; int x, y; cin >> c >> x >> y; if (c == 'M') { merge(x, y); } else { int a = find(x); int b = find(y); if (a == b) { cout << max(abs(d[x] - d[y] ) - 1, 0LL) << '\n'; } else cout<<-1<<'\n'; } } }(); } void Freopen(void) { freopen("IO.in", "r", stdin); freopen("IO.out", "w", stdout); } signed main(void) { FastIO; //Freopen(); setvbuf(stdin, NULL, _IOFBF, 1 << 25); setvbuf(stdout, NULL, _IOFBF, 1 << 25); // cout<<fixed<<setprecision(10); int t__ = 1; //cin>>t__; while (t__--) solve(); return 0; }
- 1
信息
- ID
- 5317
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 157
- 已通过
- 47
- 上传者