题解CF847A

· · 题解

题目|链接

题目大意

给出一些双向链表,其中有一些链表已经连接在了一起。现在把这些链表连成一条,求原来每条链表现在的前驱后继。

题目分析

对于链表前驱后继的记录,可以使用 pair 数组。<pair(数据类型),(数据类型)> 相当于一个结构体,如下:

struct pair{
    (数据类型) first,second;
};

而其中的 first 为第一个元素,second 为第二个元素。

其余模拟即可,只需要每次找出一个无前驱的链表接在现在链表的末尾即可。

参考程序

#include<bits/stdc++.h>
using namespace std;
int n,q;
pair<int,int>a[105];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d%d",&a[i].first,&a[i].second);
    for(int i=1;i<=n;i++)
        if(!a[i].first)
        {
            a[q].second=i;
            a[i].first=q;
            q=i;
            while(a[q].second)q=a[q].second;
        }
    for(int i=1;i<=n;i++)printf("%d %d\n",a[i].first,a[i].second);
    return 0;
}

感谢你的阅读!