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

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

潛心看書研究!

常用鏈接

留言簿(19)

隨筆分類(81)

文章分類(89)

相冊

ACM OJ

My friends

搜索

  •  

積分與排名

  • 積分 - 221556
  • 排名 - 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];?//?加權(quán)合并
????????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 閱讀(837) 評論(4)  編輯 收藏 引用 所屬分類: 算法&ACM

FeedBack:
# re: 第一次用兩種數(shù)據(jù)結(jié)構(gòu)解的題目, 紀(jì)念一下 2006-09-08 23:01 Optimistic
哇...偶木了  回復(fù)  更多評論
  
# re: 第一次用兩種數(shù)據(jù)結(jié)構(gòu)解的題目, 紀(jì)念一下 2006-09-08 23:11 
其實線段樹比較好懂, 但是難在怎么運用-_-個人感覺, 摸索中!~~~  回復(fù)  更多評論
  
# re: 第一次用兩種數(shù)據(jù)結(jié)構(gòu)解的題目, 紀(jì)念一下 2006-09-28 12:21 踏雪赤兔
進步很快哩~~贊一個!
P.S.博客手拉手弄好了~  回復(fù)  更多評論
  
# re: 第一次用兩種數(shù)據(jù)結(jié)構(gòu)解的題目, 紀(jì)念一下 2006-09-28 12:57 
thx!~:)  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              久久久一区二区三区| 9久草视频在线视频精品| 亚洲激情视频网| 性感少妇一区| 亚洲视频一区二区在线观看| 久热这里只精品99re8久| 欧美综合激情网| 国产精品久久久久高潮| 亚洲精品免费在线| 亚洲国产精品va在线看黑人 | 日韩午夜在线观看视频| 亚洲国产欧美在线| 久久精品国产一区二区三| 亚洲免费在线视频| 国产精品v一区二区三区| 亚洲欧洲日产国码二区| 午夜精品久久久久久久久久久| 欧美午夜www高清视频| 欧美一区二区女人| 久久久精品性| 韩国成人精品a∨在线观看| 午夜免费电影一区在线观看| 免费欧美日韩| 亚洲欧洲精品一区二区三区 | 99国产欧美久久久精品| 欧美激情视频在线免费观看 欧美视频免费一 | 牛牛影视久久网| 在线观看一区二区精品视频| 久久精品国产77777蜜臀| 久久性色av| 亚洲成人在线| 国产精品萝li| 亚久久调教视频| 亚洲人被黑人高潮完整版| 久久国产日韩欧美| 激情久久久久久久久久久久久久久久| 久久精品成人一区二区三区| 99国产精品99久久久久久粉嫩 | 亚洲综合国产| 久久人人爽人人爽爽久久| 亚洲大片免费看| 国产精品视频免费| 久久天堂国产精品| 亚洲国产高清在线观看视频| 一本色道久久综合亚洲精品婷婷 | 亚洲欧美日韩成人高清在线一区| 亚洲夫妻自拍| 激情亚洲成人| 国产一区二区三区成人欧美日韩在线观看 | 欧美极品aⅴ影院| 久久艳片www.17c.com| 亚洲免费在线看| 夜夜嗨一区二区三区| 亚洲国产高清视频| 欧美成人亚洲成人| 亚洲性线免费观看视频成熟| 国产一区二区av| 国产精品亚洲综合| 国产精品国产三级国产专区53| 欧美韩日一区二区| 亚洲综合精品自拍| 宅男噜噜噜66一区二区66| 久久久久se| 久久精品主播| 羞羞视频在线观看欧美| 日韩视频免费在线| 国产一区日韩二区欧美三区| 欧美精品一区二区久久婷婷| 一区二区三区视频在线观看| 久久伊人精品天天| 久久精品视频导航| 久久久99国产精品免费| 欧美一区二区在线播放| 亚洲美女毛片| 亚洲最新视频在线| 99亚洲精品| 亚洲无亚洲人成网站77777 | 欧美一区二区三区免费观看| 亚洲欧美日韩国产一区二区| 最近看过的日韩成人| 亚洲高清不卡在线| 亚洲欧洲日产国产综合网| 亚洲精选91| 欧美激情中文字幕一区二区| 亚洲欧美日韩精品在线| 欧美亚洲免费| 久久亚洲欧美国产精品乐播| 久久这里只有精品视频首页| 欧美国产亚洲视频| 一本久久a久久免费精品不卡| 一区二区三区免费看| 亚洲欧美另类在线观看| 久久精品国产精品亚洲综合| 蜜桃av噜噜一区| 久久一区精品| 欧美精品在线一区二区三区| 欧美视频在线一区二区三区| 欧美激情视频一区二区三区不卡| 欧美人妖另类| 国产日韩专区| 国产午夜精品理论片a级探花| 国内一区二区在线视频观看| 亚洲激情av在线| 亚洲午夜精品在线| 久久亚洲国产精品日日av夜夜| 欧美aaa级| 一区二区三区四区五区精品视频| 亚洲欧美一区二区原创| 老鸭窝91久久精品色噜噜导演| 欧美日韩亚洲免费| 欧美先锋影音| 狠狠干综合网| 亚洲视频一二| 美日韩丰满少妇在线观看| 亚洲三级观看| 久久精品30| 欧美三级中文字幕在线观看| 国内激情久久| 亚洲在线网站| 性欧美大战久久久久久久免费观看| 久久人体大胆视频| 亚洲最新合集| 美女视频黄免费的久久| 国产精品vvv| 亚洲精美视频| 久久久久久亚洲精品杨幂换脸| 亚洲精品乱码久久久久久蜜桃91 | 久久精品夜色噜噜亚洲a∨ | 日韩视频在线观看免费| 久久av在线| 99re成人精品视频| 欧美1级日本1级| 欧美日韩情趣电影| 亚洲国产一区二区视频 | 男人的天堂成人在线| 亚洲午夜精品福利| 久久久国产精彩视频美女艺术照福利 | 国产精品久久久久9999高清| 91久久精品日日躁夜夜躁欧美| 久久精品国产亚洲高清剧情介绍| 亚洲精品在线二区| 老司机精品久久| **欧美日韩vr在线| 久久久久久成人| 亚洲免费视频在线观看| 欧美体内she精视频| 日韩亚洲欧美成人| 亚洲第一福利视频| 欧美14一18处毛片| 亚洲国内精品| 欧美国产精品久久| 久久青草久久| 亚洲二区免费| 欧美福利一区| 免费一区视频| 亚洲精品久久嫩草网站秘色| 亚洲欧美日韩人成在线播放| 亚洲美女一区| 欧美日韩国产页| 激情综合色综合久久综合| 久久爱91午夜羞羞| 性色av一区二区三区| 国产精品最新自拍| 日韩一级免费| 亚洲精品久久久久久久久久久| 美女视频黄免费的久久| 亚洲人成艺术| 亚洲靠逼com| 国产精品成人免费| 亚洲欧美国产精品专区久久| 亚洲一区二区免费| 欧美精品久久久久久久久久| 夜夜爽99久久国产综合精品女不卡| 亚洲第一网站| 欧美日韩精品免费| 亚洲综合国产激情另类一区| 亚洲免费一在线| 影音先锋中文字幕一区二区| 欧美亚洲一区在线| 欧美在线视频免费观看| 国产精品三级视频| 久久国产直播| 久久综合色一综合色88| 亚洲精品一区二区三区不| 亚洲人成77777在线观看网| 欧美日韩国产999| 欧美一区二区三区视频在线观看 | 日韩视频专区| 亚洲一区中文字幕在线观看| 国产午夜久久| 最新成人av网站| 国产精品综合久久久| 麻豆成人在线| 久久精选视频| 一区二区三区www| 日韩一级欧洲| 国产一区二区三区丝袜| 最近看过的日韩成人| 国产乱码精品一区二区三区五月婷| 免费高清在线一区|