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

隨筆 - 87  文章 - 279  trackbacks - 0
<2006年9月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

潛心看書研究!

常用鏈接

留言簿(19)

隨筆分類(81)

文章分類(89)

相冊

ACM OJ

My friends

搜索

  •  

積分與排名

  • 積分 - 221126
  • 排名 - 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 閱讀(836) 評論(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>
              一本色道久久综合精品竹菊| 欧美精品日日鲁夜夜添| 91久久亚洲| 久久成人这里只有精品| 夜夜爽99久久国产综合精品女不卡| 亚洲欧美日韩国产综合| 99成人在线| 免费的成人av| 老司机成人在线视频| 国产精品久久久久久户外露出| 亚洲第一视频| 一区二区在线不卡| 先锋影院在线亚洲| 欧美亚洲综合在线| 国产精品成人免费| 日韩一级免费观看| 99av国产精品欲麻豆| 免费视频最近日韩| 欧美激情va永久在线播放| 韩日成人在线| 欧美伊人久久| 久久全球大尺度高清视频| 国产精品永久免费视频| 亚洲一区二区三区四区视频| 亚洲在线观看免费| 欧美日韩免费一区二区三区| 亚洲精品国精品久久99热一| 99视频在线精品国自产拍免费观看| 免费一级欧美片在线播放| 欧美刺激性大交免费视频| 国产视频一区免费看| 亚洲午夜视频在线| 欧美淫片网站| 国产视频一区二区在线观看| 久久不射2019中文字幕| 久久欧美中文字幕| 影音先锋久久资源网| 免费不卡视频| 亚洲三级电影全部在线观看高清| 日韩视频在线免费观看| 欧美高清在线播放| 亚洲精品久久嫩草网站秘色| 中文精品视频| 国产欧美一区二区精品婷婷| 久久久免费观看视频| 欧美激情中文字幕乱码免费| 99在线精品视频在线观看| 欧美日一区二区三区在线观看国产免 | 在线亚洲成人| 国产精品久久久久久久久久尿| 亚洲自拍啪啪| 欧美1区2区3区| 一区二区高清在线观看| 国产精品自在线| 久久午夜精品| 日韩一区二区免费看| 久久大综合网| 亚洲精品一区二区网址| 国产精品电影网站| 久久蜜桃资源一区二区老牛| 亚洲区一区二| 久久精品一本久久99精品| 亚洲三级免费电影| 国产精品区一区二区三区| 久久久久久久综合狠狠综合| 亚洲六月丁香色婷婷综合久久| 欧美一区视频在线| 亚洲毛片播放| 韩国美女久久| 国产精品大片免费观看| 老司机成人在线视频| 国产精品99久久久久久宅男| 你懂的成人av| 午夜久久久久| 亚洲精品美女91| 韩日午夜在线资源一区二区| 欧美日韩国产页| 久久久久网站| 亚洲欧美成人在线| 亚洲人成亚洲人成在线观看| 亚洲欧美久久久久一区二区三区| 亚洲国产精品成人va在线观看| 国产精品免费在线| 欧美精品自拍| 久热精品视频在线| 欧美在线观看一区| 一级成人国产| 亚洲人成在线播放| 欧美好吊妞视频| 久久噜噜亚洲综合| 欧美一区二区精品在线| 一片黄亚洲嫩模| 亚洲人屁股眼子交8| 一区二区视频免费在线观看| 国产美女精品视频免费观看| 国产精品ⅴa在线观看h| 欧美黄污视频| 欧美成人高清| 欧美高清视频www夜色资源网| 久久午夜激情| 久久女同精品一区二区| 欧美专区第一页| 欧美在线亚洲在线| 校园春色国产精品| 亚洲欧美日本国产有色| 亚洲性感美女99在线| 一本久久知道综合久久| 亚洲国产一区在线观看| 最近看过的日韩成人| 91久久精品视频| 亚洲高清免费在线| 最新亚洲激情| 99爱精品视频| 在线综合+亚洲+欧美中文字幕| 99综合视频| 亚洲网友自拍| 亚洲欧美日韩精品一区二区 | 亚洲综合视频网| 亚洲影音一区| 欧美一区二区成人6969| 欧美一区二区在线播放| 久久狠狠亚洲综合| 久久综合给合久久狠狠狠97色69| 久久只精品国产| 欧美成人首页| 国产精品高潮呻吟久久av无限| 国产精品久久久久久久久果冻传媒| 国产精品久久久久久久久免费桃花 | 一本到12不卡视频在线dvd| 99国产精品| 午夜日韩激情| 久久综合电影一区| 欧美日本久久| 国产精品日韩一区| 经典三级久久| 在线一区亚洲| 久久久精品国产99久久精品芒果| 免费成人美女女| 日韩视频在线观看免费| 欧美亚洲日本一区| 欧美成人嫩草网站| 国产精品国产一区二区| 国内精品久久久久久久97牛牛| 亚洲人成在线观看一区二区| 亚洲一区国产| 麻豆视频一区二区| 一区二区三区导航| 久久久国产午夜精品| 欧美日韩高清在线播放| 国产亚洲aⅴaaaaaa毛片| 亚洲人成亚洲人成在线观看| 性娇小13――14欧美| 亚洲第一精品在线| 亚洲尤物在线| 欧美激情女人20p| 国产在线日韩| 亚洲欧美激情精品一区二区| 欧美va天堂| 亚洲欧美日韩一区二区| 欧美精品一区二区三区蜜桃| 韩国免费一区| 亚洲免费在线视频| 亚洲电影视频在线| 欧美在线观看www| 国产精品高潮呻吟久久av无限 | 亚洲日本中文| 久久成人免费| 99热免费精品| 欧美国产日产韩国视频| 韩国亚洲精品| 欧美一区二区黄色| 99热免费精品| 欧美精品激情在线观看| 影音先锋中文字幕一区| 欧美一区91| 在线一区二区三区四区| 欧美精品一区在线观看| 在线观看欧美激情| 久久久精品久久久久| 亚洲一区二区三区高清| 欧美日韩国产精品专区 | 狠狠色2019综合网| 亚洲午夜在线观看| 亚洲国产欧美一区二区三区同亚洲 | 在线亚洲国产精品网站| 欧美激情久久久久久| 久久免费国产| 好吊色欧美一区二区三区四区| 欧美在线地址| 午夜精品久久久久久久久久久 | 国产一区二区三区在线观看免费视频 | 亚洲一区二区少妇| 国产精品xnxxcom| 亚洲午夜av在线| 亚洲免费av观看| 欧美视频1区| 午夜在线精品偷拍| 亚洲男人第一网站| 国产午夜精品久久| 久久久久久尹人网香蕉|