青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 87  文章 - 279  trackbacks - 0
<2006年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

潛心看書研究!

常用鏈接

留言簿(19)

隨筆分類(81)

文章分類(89)

相冊

ACM OJ

My friends

搜索

  •  

積分與排名

  • 積分 - 219411
  • 排名 - 118

最新評論

閱讀排行榜

評論排行榜

USE?并查集和線段樹

The k-th Largest Group
Time Limit:2000MS? Memory Limit:131072K
Total Submit:1222 Accepted:290

Description

Newman likes playing with cats. He possesses lots of cats in his home. Because the number of cats is really huge, Newman wants to group some of the cats. To do that, he first offers a number to each of the cat (1, 2, 3, …, n). Then he occasionally combines the group cat i is in and the group cat j is in, thus creating a new group. On top of that, Newman wants to know the size of the k-th biggest group at any time. So, being a friend of Newman, can you help him?

Input

1st line: Two numbers N and M (1 ≤ N, M ≤ 200,000), namely the number of cats and the number of operations.

2nd to (m + 1)-th line: In each line, there is number C specifying the kind of operation Newman wants to do. If C = 0, then there are two numbers i and j (1 ≤ i, jn) following indicating Newman wants to combine the group containing the two cats (in case these two cats are in the same group, just do nothing); If C = 1, then there is only one number k (1 ≤ k ≤ the current number of groups) following indicating Newman wants to know the size of the k-th largest group.

Output

For every operation “1” in the input, output one number per line, specifying the size of the kth largest group.

Sample Input

10 10
0 1 2
1 4
0 3 4
1 2
0 5 6
1 1
0 7 8
1 1
0 9 10
1 1

Sample Output

1
2
2
2
2

Hint

When there are three numbers 2 and 2 and 1, the 2nd largest number is 2 and the 3rd largest number is 1.

Source
POJ Monthly--2006.08.27, zcgzcgzcg

#include?<iostream>
using?namespace?std;
const?int?MAXN?=?200001;

class?UFset
{
public:
????
int?parent[MAXN];
????UFset();
????
int?Find(int);
????
void?Union(int,?int);
}
;

UFset::UFset()
{
????memset(parent,?
-1,?sizeof(parent));
}


int?UFset::Find(int?x)
{
????
if?(parent[x]?<?0)
????????
return?x;
????
else
????
{
????????parent[x]?
=?Find(parent[x]);
????????
return?parent[x];
????}
//?壓縮路徑
}


void?UFset::Union(int?x,?int?y)
{
????
int?pX?=?Find(x);
????
int?pY?=?Find(y);
????
int?tmp;
????
if?(pX?!=?pY)
????
{
????????tmp?
=?parent[pX]?+?parent[pY];?//?加權合并
????????if?(parent[pX]?>?parent[pY])
????????
{
????????????parent[pX]?
=?pY;
????????????parent[pY]?
=?tmp;
????????}

????????
else
????????
{
????????????parent[pY]?
=?pX;
????????????parent[pX]?
=?tmp;
????????}

????}

}


int?f[(MAXN+1)*3]?=?{0};
int?n,?m;

void?initTree()
{
????
int?l?=?1,?r?=?n;
????
int?c?=?1;
????
while?(l?<?r)
????
{
????????f[c]?
=?n;
????????c?
=?c?*?2;
????????r?
=?(l?+?r)?/?2;
????}

????f[c]?
=?n;//葉子初始化
}


void?insertTree(int?k)
{
????
int?l?=?1,?r?=?n;
????
int?c?=?1;
????
int?mid;

????
while?(l?<?r)
????
{
????????f[c]
++;
????????mid?
=?(r?+?l)?/?2;
????????
if?(k?>?mid)
????????
{
????????????l?
=?mid?+?1;
????????????c?
=?c?*?2?+?1;
????????}

????????
else
????????
{
????????????r?
=?mid;
????????????c?
=?c?*?2;
????????}

????}

????f[c]
++;//葉子增加1
}


void?delTree(int?k)
{
????
int?l?=?1,?r?=?n;
????
int?c?=?1;
????
int?mid;

????
while?(l?<?r)
????
{
????????f[c]
--;
????????mid?
=?(r?+?l)?/?2;
????????
if?(k?>?mid)
????????
{
????????????l?
=?mid?+?1;
????????????c?
=?c?*?2?+?1;
????????}

????????
else
????????
{
????????????r?
=?mid;
????????????c?
=?c?*?2;
????????}

????}

????f[c]
--;//葉子減少1
}


int?searchTree(int?k)
{
????
int?l?=?1,?r?=?n;
????
int?c?=?1;
????
int?mid;

????
while?(l?<?r)
????
{
????????mid?
=?(l?+?r)?/?2;
????????
if?(k?<=?f[2*c+1])
????????
{
????????????l?
=?mid?+?1;
????????????c?
=?c?*?2?+?1;
????????}

????????
else
????????
{
????????????k?
-=?f[2*c+1];
????????????r?
=?mid;
????????????c?
=?c?*?2;
????????}

????}

????
return?l;
}


int?main()
{
????
int?i,?j;
????
int?x,?y;
????
int?k;
????
int?l,?r;
????
int?cmd;
????
int?px,?py;
????
int?tx,?ty,?tz;
????UFset?UFS;

????
????scanf(
"%d%d",?&n,?&m);
????initTree();
????
for?(i=0;?i<m;?i++)
????
{
????????scanf(
"%d",?&cmd);
????????
if?(cmd?==?0)
????????
{
????????????scanf(
"%d%d",?&x,?&y);
????????????px?
=?UFS.Find(x);
????????????py?
=?UFS.Find(y);
????????????
if?(px?!=?py)
????????????
{
????????????????tx?
=?-UFS.parent[px];
????????????????ty?
=?-UFS.parent[py];
????????????????tz?
=?tx?+?ty;
????????????????UFS.Union(x,?y);
????????????????insertTree(tz);
????????????????delTree(tx);
????????????????delTree(ty);
????????????}

????????}

????????
else
????????
{
????????????scanf(
"%d",?&k);
????????????printf(
"%d\n",?searchTree(k));
????????}

????}

????
return?0;
}
posted on 2006-09-06 13:30 閱讀(827) 評論(4)  編輯 收藏 引用 所屬分類: 算法&ACM

FeedBack:
# re: 第一次用兩種數據結構解的題目, 紀念一下 2006-09-08 23:01 Optimistic
哇...偶木了  回復  更多評論
  
# re: 第一次用兩種數據結構解的題目, 紀念一下 2006-09-08 23:11 
其實線段樹比較好懂, 但是難在怎么運用-_-個人感覺, 摸索中!~~~  回復  更多評論
  
# re: 第一次用兩種數據結構解的題目, 紀念一下 2006-09-28 12:21 踏雪赤兔
進步很快哩~~贊一個!
P.S.博客手拉手弄好了~  回復  更多評論
  
# re: 第一次用兩種數據結構解的題目, 紀念一下 2006-09-28 12:57 
thx!~:)  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              欧美极品一区| 欧美高清视频在线 | 欧美成年人网| 久久久精品国产免费观看同学| 国产亚洲精品美女| 久久人人爽人人爽| 免费h精品视频在线播放| 亚洲精品乱码久久久久久按摩观| 亚洲高清精品中出| 欧美伦理a级免费电影| 亚洲综合日韩中文字幕v在线| 亚洲欧美日韩中文视频| 在线日韩av片| 亚洲深夜福利| 一区在线免费| 日韩一区二区免费看| 国产精品一二| 欧美激情国产高清| 国产精品视频yy9299一区| 另类人畜视频在线| 欧美日韩一区二区三区在线视频 | 精品成人在线观看| 日韩亚洲欧美一区二区三区| 国产视频一区免费看| 亚洲激情一区二区三区| 亚洲高清精品中出| 国产日韩欧美在线看| 91久久极品少妇xxxxⅹ软件| 国产日韩精品一区观看 | 亚洲影院在线| 麻豆精品91| 久久国产精品久久国产精品| 欧美精品999| 久久字幕精品一区| 国产精品亚洲人在线观看| 亚洲国产一区二区三区在线播| 国产美女诱惑一区二区| 亚洲三级电影全部在线观看高清| 国产在线播精品第三| 国产精品99久久不卡二区| 亚洲黄色在线| 久久午夜激情| 久久美女艺术照精彩视频福利播放| 欧美日韩国产不卡在线看| 欧美91大片| 激情亚洲一区二区三区四区| 午夜亚洲性色福利视频| 亚洲亚洲精品三区日韩精品在线视频| 久久天天躁狠狠躁夜夜爽蜜月| 欧美激情1区| 欧美国产日韩精品| 在线观看福利一区| 欧美在线观看你懂的| 欧美一级视频免费在线观看| 国产精品盗摄一区二区三区| 亚洲日本理论电影| 亚洲精品一区二区三区av| 免费短视频成人日韩| 免费视频一区| 亚洲国产美国国产综合一区二区| 久久精品国产久精国产思思| 久久久国产91| 国产伊人精品| 久久婷婷成人综合色| 免费欧美在线视频| 亚洲经典一区| 欧美日韩国产精品自在自线| 91久久国产综合久久蜜月精品 | 国产精品入口66mio| 亚洲视频网在线直播| 亚洲欧美一区二区三区极速播放| 国产精品草草| 欧美一区国产二区| 能在线观看的日韩av| 亚洲精品一区二区三区av| 欧美精品粉嫩高潮一区二区 | 久久久99免费视频| 久久综合伊人77777蜜臀| 一区二区在线视频| 免费观看久久久4p| 日韩午夜在线电影| 午夜精品福利在线观看| 国内精品久久久久影院薰衣草| 欧美永久精品| 最新日韩在线| 新67194成人永久网站| 极品尤物av久久免费看| 欧美二区视频| 亚洲影院免费| 免费成人av资源网| 亚洲午夜电影在线观看| 国产亚洲第一区| 免费欧美在线视频| 在线一区日本视频| 免费h精品视频在线播放| 99re6热只有精品免费观看| 国产精品久久久久久久一区探花| 欧美一区免费| 亚洲精品日韩精品| 久久国产精品久久精品国产 | 亚洲黄色在线观看| 欧美一区二区三区四区在线观看地址| 韩国一区二区三区美女美女秀| 欧美黄色片免费观看| 午夜精品久久久久久久白皮肤 | 久久高清一区| 日韩一级网站| 精品盗摄一区二区三区| 国产精品美女久久久浪潮软件| 久久综合色婷婷| 香蕉精品999视频一区二区| 91久久综合亚洲鲁鲁五月天| 久久久美女艺术照精彩视频福利播放 | 小嫩嫩精品导航| 亚洲精选一区二区| 免费观看日韩| 久久精品国产视频| 亚洲专区一二三| 亚洲精品视频一区二区三区| 激情久久综艺| 国产精品美女久久久久久2018| 欧美连裤袜在线视频| 久久在线精品| 久久久久久国产精品mv| 亚洲欧美国内爽妇网| 99国内精品| 亚洲精品国产精品久久清纯直播| 麻豆av一区二区三区| 久久久999精品| 久久国产黑丝| 久久精品国产99精品国产亚洲性色| 亚洲一区二区三区高清 | 欧美高清视频在线| 免费视频一区二区三区在线观看| 久久精品一二三区| 久久精品国产v日韩v亚洲| 欧美一区二区三区久久精品茉莉花| av成人免费在线观看| 日韩视频免费| 亚洲精品一区二区三区福利| 亚洲精品美女在线| 亚洲人成绝费网站色www| 亚洲三级网站| 日韩亚洲精品在线| 亚洲欧洲日韩综合二区| 亚洲人在线视频| 亚洲毛片av| 一片黄亚洲嫩模| 亚洲一区二区av电影| 亚洲欧美激情视频| 欧美在线一二三四区| 香蕉免费一区二区三区在线观看 | 黄色精品一区| 有码中文亚洲精品| 亚洲精品欧美激情| 99精品国产高清一区二区| 亚洲一区二区三区免费视频| 午夜精品区一区二区三| 午夜精品视频一区| 久久人人爽人人| 亚洲国产精品一区二区第四页av| 亚洲欧洲日夜超级视频| 一区二区视频欧美| 亚洲精品一级| 香蕉成人久久| 美玉足脚交一区二区三区图片| 亚洲国产精品久久| 一区二区三区视频观看| 久久精品二区| 欧美精品自拍| 国产欧美精品日韩精品| 亚洲第一天堂无码专区| 一本色道久久88亚洲综合88| 欧美夜福利tv在线| 欧美激情一区二区三区不卡| 在线一区亚洲| 久久婷婷久久| 欧美系列一区| 在线观看亚洲视频| 亚洲欧美精品| 欧美国产综合视频| 亚洲一区二区视频在线观看| 久热国产精品| 国产喷白浆一区二区三区| 亚洲乱码国产乱码精品精98午夜 | 一区二区三区黄色| 久久欧美肥婆一二区| 99精品久久免费看蜜臀剧情介绍| 久久国产精品黑丝| 国产精品另类一区| 一区二区三区欧美成人| 欧美国产视频在线观看| 亚洲欧美一区二区激情| 欧美久久99| 最新国产成人av网站网址麻豆 | 午夜精品视频在线观看| 欧美韩日一区二区三区| 国产综合欧美在线看| 亚洲一区在线播放| 亚洲国产精品第一区二区三区|