基德KID.1412 发表于 2013-2-1 11:23:39

HDU_1856_More is better

http://acm.hdu.edu.cn/showproblem.php?pid=1856


简单的并查集
题意:给出在同一个集合的2个元素,问最后那个最多元素的集合有多少个元素,注意,每个元素可以独立存在,因此至少有1个


#include <iostream>using namespace std;int pre, con;int find (int a){    int b = a;    while (a != pre)      a = pre;    while (b != a)    {      int t = b;      b = pre;      pre = a;    }    return a;}int main(){    int n, i, a, b, A, B, res;    while (scanf ("%d", &n) != EOF)    {      res = 1;    //这里初始化一定是1,因为下面的合并操作有可能一次都不执行,况且至少每个集合有1个人      for (i = 1; i <= 10000000; i++)            pre = i, con = 1;      for (i = 0; i < n; i++)      {            scanf ("%d%d", &a, &b);            A = find (a);            B = find (b);            if (A != B)            {                pre = A;                con += con;                if (res < con)                  res = con;            }      }      printf ("%d\n", res);    }    return 0;}
页: [1]
查看完整版本: HDU_1856_More is better