Chinaunix首页 | 论坛 | 博客
  • 博客访问: 49092
  • 博文数量: 45
  • 博客积分: 1112
  • 博客等级: 少尉
  • 技术积分: 575
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-03 11:47
文章分类

全部博文(45)

文章存档

2013年(45)

我的朋友

分类: C/C++

2013-01-13 12:55:01

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <vector>
  8. #include <stack>
  9. #include <deque>
  10. #include <queue>
  11. #include <bitset>
  12. #include <list>
  13. #include <map>
  14. #include <set>
  15. #include <iterator>
  16. #include <algorithm>
  17. #include <functional>
  18. #include <utility>
  19. #include <sstream>
  20. #include <climits>
  21. #include <cassert>
  22. #define BUG puts("here!!!");

  23. using namespace std;
  24. const int N = 100005;
  25. struct Node {
  26.     int par;
  27.     int sum;
  28. };
  29. int SUM;

  30. Node p[2*N + 5];
  31. void makeSet(int n) {
  32.     for(int i = 0; i <= 2*n; i++) {
  33.         p[i].par = i;
  34.         p[i].sum = 1;
  35.     }
  36.     SUM = 1;
  37. }
  38. int find(int a) {
  39.     if(a == p[a].par) return a;
  40.     return p[a].par = find(p[a].par);
  41. }
  42. void union1(int a, int b) {
  43.     int fa = find(a);
  44.     int fb = find(b);
  45.     if(fa != fb) {
  46.         p[fa].par = fb;
  47.         p[fb].sum += p[fa].sum;
  48.     }
  49.     if(p[fb].sum > SUM) {
  50.         SUM = p[fb].sum;
  51.     }
  52. }
  53. int main() {
  54.     int n, a, b;
  55.     while(scanf("%d", &n) == 1) {
  56.         makeSet(n);
  57.         while(n--) {
  58.             scanf("%d%d", &a, &b);
  59.             union1(a, b);
  60.         }
  61.         printf("%d\n", SUM);
  62.     }
  63.     return 0;
  64. }

阅读(345) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~