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

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

潛心看書研究!

常用鏈接

留言簿(19)

隨筆分類(81)

文章分類(89)

相冊(cè)

ACM OJ

My friends

搜索

  •  

積分與排名

  • 積分 - 219411
  • 排名 - 118

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

USE?并查集和線段樹(shù)

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 閱讀(827) 評(píng)論(4)  編輯 收藏 引用 所屬分類: 算法&ACM

FeedBack:
# re: 第一次用兩種數(shù)據(jù)結(jié)構(gòu)解的題目, 紀(jì)念一下 2006-09-08 23:01 Optimistic
哇...偶木了  回復(fù)  更多評(píng)論
  
# re: 第一次用兩種數(shù)據(jù)結(jié)構(gòu)解的題目, 紀(jì)念一下 2006-09-08 23:11 
其實(shí)線段樹(shù)比較好懂, 但是難在怎么運(yùn)用-_-個(gè)人感覺(jué), 摸索中!~~~  回復(fù)  更多評(píng)論
  
# re: 第一次用兩種數(shù)據(jù)結(jié)構(gòu)解的題目, 紀(jì)念一下 2006-09-28 12:21 踏雪赤兔
進(jìn)步很快哩~~贊一個(gè)!
P.S.博客手拉手弄好了~  回復(fù)  更多評(píng)論
  
# re: 第一次用兩種數(shù)據(jù)結(jié)構(gòu)解的題目, 紀(jì)念一下 2006-09-28 12:57 
thx!~:)  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              亚洲人成网站影音先锋播放| 欧美sm视频| 久久久久国产精品午夜一区| 欧美成人亚洲成人| 老司机成人网| 欧美成人首页| 欧美精品亚洲二区| 欧美激情在线| 欧美体内she精视频| 欧美视频日韩| 国精品一区二区三区| 在线观看日产精品| 一本久久精品一区二区| 午夜激情综合网| 久久黄色小说| 欧美二区不卡| 99这里只有精品| 亚洲综合精品一区二区| 久久不射电影网| 欧美国产日产韩国视频| 国产精品欧美日韩久久| 国产精品亚发布| 国产综合精品| 一区二区精品国产| 亚洲一区二区三区免费视频| 久久av免费一区| 亚洲第一精品夜夜躁人人躁| 9i看片成人免费高清| 久久精品日产第一区二区| 欧美大秀在线观看| 国产欧美一区二区三区久久人妖| 韩国三级在线一区| 在线亚洲欧美| 欧美激情视频在线播放| 亚洲免费视频在线观看| 欧美激情一区二区三区全黄| 国内精品久久久久久| 亚洲在线观看免费视频| 亚洲国产精品女人久久久| 性欧美video另类hd性玩具| 欧美激情aaaa| 国产精品v片在线观看不卡| 在线精品亚洲| 久久久999成人| 亚洲午夜国产成人av电影男同| 美女网站在线免费欧美精品| 国产精品永久免费观看| 亚洲免费观看高清在线观看| 久久久www| 香蕉久久国产| 国产精品美女久久久浪潮软件| 日韩午夜电影在线观看| 欧美高清视频www夜色资源网| 欧美在线观看一区二区三区| 国产乱子伦一区二区三区国色天香| 亚洲午夜高清视频| 99精品欧美一区| 欧美日本一区| 亚洲破处大片| 欧美高清免费| 免费在线成人av| 亚洲精品乱码久久久久久按摩观| 欧美gay视频激情| 久久亚洲一区二区| 亚洲激情视频在线播放| 欧美国产成人精品| 欧美福利一区二区| 一区二区三区视频观看| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲午夜精品视频| 欧美成人一区二区三区片免费| 亚洲第一精品夜夜躁人人躁| 欧美大秀在线观看| 亚洲精品免费在线观看| 亚洲国产精品成人| 欧美福利专区| 夜夜狂射影院欧美极品| 亚洲国产综合在线看不卡| 欧美成人在线免费视频| 日韩一级精品视频在线观看| 日韩亚洲在线观看| 国产精品任我爽爆在线播放| 欧美一区二区黄色| 久久激情视频久久| 亚洲经典一区| 99国产精品久久| 国产精品实拍| 榴莲视频成人在线观看| 免费视频一区| 亚洲视频久久| 午夜影院日韩| 亚洲区国产区| 亚洲一区二区综合| 狠狠爱综合网| 99国产精品99久久久久久| 国产日韩一区二区三区在线播放| 免费成人黄色| 国产精品久久久久7777婷婷| 老司机精品导航| 国产精品久久久久久久久久久久| 久久久女女女女999久久| 欧美成人亚洲成人日韩成人| 午夜精品久久久久| 欧美电影在线| 久久精品水蜜桃av综合天堂| 欧美成人情趣视频| 久久久久久久久久码影片| 欧美激情综合五月色丁香小说| 欧美一级大片在线观看| 欧美精品入口| 欧美福利视频一区| 久久九九热免费视频| 欧美资源在线| 欧美精品久久久久久久久久| 亚洲制服丝袜在线| 噜噜噜91成人网| 久久久久久久久久久久久9999| 欧美日韩午夜在线视频| 欧美电影免费观看高清| 国产情侣一区| 99热免费精品在线观看| 国产精品久久久久久久久久妞妞| 国产毛片精品国产一区二区三区| 亚洲高清不卡在线观看| 国产精品实拍| 亚洲毛片在线观看.| 一区免费观看视频| 亚洲一区日本| 亚洲一级二级| 欧美日韩国产精品专区| 欧美ed2k| 亚洲国产精品高清久久久| 西瓜成人精品人成网站| 亚洲欧美日韩一区二区| 欧美小视频在线观看| 亚洲毛片在线| 中文在线资源观看视频网站免费不卡| 你懂的亚洲视频| 欧美成人官网二区| 亚洲激情偷拍| 欧美电影电视剧在线观看| 欧美激情亚洲| 亚洲精品久久久一区二区三区| 嫩草成人www欧美| 最新中文字幕一区二区三区| 最新日韩精品| 欧美精品粉嫩高潮一区二区| 日韩视频永久免费| 亚洲一区二区三区免费视频 | 这里只有精品视频在线| 欧美国产日韩免费| 日韩视频在线观看国产| 亚洲欧美日韩一区| 国内外成人在线视频| 蜜月aⅴ免费一区二区三区| 亚洲精品国产日韩| 亚洲曰本av电影| 国产日韩在线一区二区三区| 久久久久久高潮国产精品视| 亚洲福利视频专区| 亚洲图片欧洲图片av| 国产精品午夜视频| 久久美女性网| 91久久久久久国产精品| 亚洲欧美日韩另类精品一区二区三区| 国产精品日韩欧美大师| 久久精品一本久久99精品| 欧美激情精品久久久久久久变态 | 99精品热视频只有精品10| 国产精品久久国产愉拍 | 最新高清无码专区| 欧美三区在线| 欧美中文字幕视频| 亚洲黄色免费| 欧美在线影院| 亚洲精品视频在线| 国产美女一区| 久热国产精品| 亚洲一区在线观看视频 | 国产精品毛片大码女人| 久久成人精品| 日韩小视频在线观看| 老司机免费视频一区二区三区 | 欧美精品久久99| 欧美一区永久视频免费观看| 亚洲精品视频免费| 久久一日本道色综合久久| 亚洲视频久久| 精品av久久707| 国产精品视频你懂的| 欧美久久综合| 久久婷婷久久| 亚洲欧美日韩人成在线播放| 亚洲国产欧美日韩另类综合| 久久精品国产一区二区三| 亚洲视频在线观看视频| 亚洲国产精品久久精品怡红院| 国产精品免费观看在线| 欧美日韩午夜激情| 欧美人成在线|