zoukankan      html  css  js  c++  java
  • poj 1988

    // hnldyhy(303882171) 15:56:57
    // poj 1988

    /*
    思路:找到含X的那叠箱子的箱子总数减去X上面的箱子数再减1就是所要的答案。
    如果a堆在b上,那么b上面的箱子数就是等于含a的那叠箱子的总数;
    */

    #include <stdio.h>
    #define N 30001

    int p[N];
    int n_all[N];
    int n_up[N];

    void init()
    {
    register int i;
    for (i=1;i<N;i++)
    {
    p[i]=i;
    n_up[i]=0;
    n_all[i]=1;
    }
    }

    int find(int x)
    {
    int tmp;
    if (x!=p[x]) //路径压缩
    {
    tmp=p[x];
    p[x]=find(p[x]);
    n_up[x]+=n_up[tmp];//该节点x头上的节点个数 等于 (其父节点头上的 )+ (自己原本头上的)
    }
    return p[x];
    }

    void merge(int a,int b)
    {
    a=find(a),b=find(b);
    p[b]=a; //合并
    n_up[b]=n_all[a]; //更新 b上面的箱子数
    n_all[a]+=n_all[b]; //更新a那叠箱子的箱子总数
    }

    int main()
    {
    int n,a,b,x,px;
    int i;
    char ch;
    while (scanf("%d%*c",&n)!=EOF)
    {
    init();
    for (i=0;i<n;i++)
    {
    while (scanf("%c",&ch),ch==' ');
    if (ch=='M')
    {
    scanf("%d%d",&a,&b);
    merge(a,b);
    }
    else
    {
    scanf("%d",&x);
    px=find(x);
    printf("%d ",n_all[px]-n_up[x]-1);
    }
    }
    }
    return 0;
    }

  • 相关阅读:
    NIO 学习笔记
    Spring Boot 学习笔记
    Java集合框架
    StringBuffer&StringBuilder类
    String 类
    Java 重写 hashCode() 和 equals() 方法
    Java 基本数据类型 && 位运算
    [SequenceFile_1] Hadoop 序列文件
    Windows 下端口被占用
    Java 反射机制
  • 原文地址:https://www.cnblogs.com/2014acm/p/3903303.html
Copyright © 2011-2022 走看看