码迷,mamicode.com
首页 > 其他好文 > 详细

cf-Round541-Div2-F(并查集+静态链表)

时间:2019-02-24 00:44:42      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:题目   编译器   ext   include   编译   next   def   http   names   

题目链接:http://codeforces.com/contest/1131/problem/F

思路:

很容易看出这是一道并查集的题目,因为要输出每个cage中住的鸟的编号,故采用静态链表。用l[i]表示一条链的最左端编号,r[i]表示一条链最右端编号,nex[i]表示编号i后面的鸟的编号,root[i]表示i的祖先,剩下套并查集模板即可。我在这CE了两次,后来问了大神才找到错误,bits/stdc++中已经1定义了get,next,而我的程序中将这两个作为变量,从而CE,但可能是我的编译器的标准库的问题,使得本地可以通过。

代码如下:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int maxn=150005;
 5 int n,x,y;
 6 int l[maxn],r[maxn],nex[maxn],root[maxn];
 7 
 8 int getr(int k){
 9     if(root[k]==k) return k;
10     else return root[k]=getr(root[k]);
11 }
12 
13 int main(){
14     scanf("%d",&n);
15     for(int i=1;i<=n;++i)
16         l[i]=i,r[i]=i,root[i]=i;
17     n--;
18     while(n--){
19         scanf("%d%d",&x,&y);
20         int rx=getr(x),ry=getr(y);
21         root[ry]=rx;
22         nex[r[rx]]=l[ry];
23         r[rx]=r[ry];
24     }
25     int p=l[get(1)];
26     while(p){
27         printf("%d ",p);
28         p=nex[p];
29     }
30     printf("\n");
31     return 0;
32 }

 

cf-Round541-Div2-F(并查集+静态链表)

标签:题目   编译器   ext   include   编译   next   def   http   names   

原文地址:https://www.cnblogs.com/FrankChen831X/p/10424971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!