zoukankan      html  css  js  c++  java
  • 瑞神要考研(并查集)

    1003: 瑞神要考研

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 300  解决: 87
    [提交][状态][讨论版]

    题目描述

    瑞神要准备考研了,为了复习数据结构,瑞神在某宝上买了一本数据结构得考研辅导资料《考研数据结构---从入门到放弃》,从此瑞神开始了愉快的复(zhuang)习(bi)。 
    有一天,瑞神找了好多条链表来辅助自己复习,但是他在复习的过程中一不小心把链表掉在了地上,捡起来的时候链表以及断成了好多个结点,每个结点只保留了当前结点的地址、结点的值和下一个结点的地址。
    瑞神看着这些结点浑身难受无法复习,为了让瑞神继续复(zhuang)习(bi)下去,请你帮瑞神把链表复原。  

    输入

    第一行给出结点的个数 n(1<=n<=100000)。 
    接下来 n 行每行给出一个结点的信息:结点地址、值和下一个结点的地址。 
    地址为 5 位数字,-1 表示地址为 NULL。 
    保证每一条链表的最后一个结点的下一个结点地址为-1。   

    输出

    每一行输出一条链表,只输出每个节点的值。 
    多条链表按照首结点地址从小到大排序。 

    样例输入

    3
    00323 155 -1
    00322 87 00323
    00233 1 -1
    

    样例输出

    1
    87 155
    

    提示

    来源


    一道类似于模拟的题目。用一个并查集合并就好!!!

    #include <bits/stdc++.h>
    using namespace std;
     
    const int MAXN = 1e6 + 5;
     
    struct Node {
        //int pre;
        int val;
        int nxt;
    } node[MAXN];
     
    int fa[MAXN];
     
    int setFind(int x)
    {
        if (fa[x] < 0) {
            return x;
        }
        return fa[x] = setFind(fa[x]);
    }
     
    void setJoin(int x, int y)
    {
        x = setFind(x);
        y = setFind(y);
        if (x != y) {
            fa[y] = x;
        }
    }
     
    int main()
    {
        int n;
        int i;
        int a, b, c;
        set<int> st;
        set<int>::iterator it;
        int cur;
     
        while (~scanf("%d", &n)) {
            memset(fa, -1, sizeof(fa));
            st.clear();
            for (i = 0; i < n; ++i) {
                scanf("%d%d%d", &a, &b, &c);
                node[a].val = b;
                node[a].nxt = c;
                if (c != -1) {
                    setJoin(a, c);
                }
                st.insert(a);
            }
            for (it = st.begin(); it != st.end(); ++it) {
                //printf("%d, ", *it);
                if (fa[*it] < 0) {
                    cur = *it;
                    while (node[cur].nxt != -1) {
                        printf("%d ", node[cur].val);
                        cur = node[cur].nxt;
                    }
                    printf("%d
    ", node[cur].val);
                }
            }
        }
     
        return 0;
    }
     
    /**************************************************************
        Problem: 1003
        User: T035
        Language: C++
        Result: 正确
        Time:248 ms
        Memory:15244 kb
    ****************************************************************/







  • 相关阅读:
    机器学习中的距离度量
    ubuntu 安装JDK
    pandas 代码
    pandas 常用统计方法
    python内置函数map/reduce/filter
    详解SQL Server连接(内连接、外连接、交叉连接)
    什么是SAD,SAE,SATD,SSD,SSE,MAD,MAE,MSD,MSE?
    数据挖掘算法源代码:很好的参考资料
    python linecache模块读取文件用法详解
    python读取文件指定行
  • 原文地址:https://www.cnblogs.com/zswbky/p/8454158.html
Copyright © 2011-2022 走看看