#include<vector> #include<iostream> #include<algorithm> #include<unordered_set> #include<unordered_map> using namespace std; class Solution { public: int N, M, K; int total; vector<int> pre; void solve() { cin >> N >> M >> K; total = N; pre = vector<int>(N+M, -1); for (int i = 0; i < N; ++i) { pre[i] = i; } int rootu, rootv, u, v; for (int k = 0; k < K; ++k) { cin >> u >> v; --u, --v, v += N; if (pre[v] == -1) { pre[v] = unionsearch(u); }else{ rootu = unionsearch(u); rootv = unionsearch(v); if(rootu!=rootv){ pre[rootu] = rootv; --total; } } } cout << total - 1 << endl; } int unionsearch(int k) { int root = pre[k]; while (root != pre[root]) { root = pre[root]; } int cur_node = k, pre_node = pre[k]; while (cur_node != root) { pre[cur_node] = root; cur_node = pre_node; pre_node = pre[cur_node]; } return root; } }; int main() { Solution s; s.solve(); return 0; } 过了91%
点赞 3

相关推荐

不愿透露姓名的神秘牛友
07-21 17:59
点赞 评论 收藏
分享
流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务