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

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

潛心看書(shū)研究!

常用鏈接

留言簿(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>
              中文在线资源观看网站视频免费不卡| 亚洲人成人77777线观看| 欧美一区二区三区视频在线| aa成人免费视频| 一本到12不卡视频在线dvd| 日韩亚洲国产精品| 亚洲一级片在线观看| 香蕉国产精品偷在线观看不卡| 欧美影院久久久| 性娇小13――14欧美| 麻豆久久婷婷| 一本色道久久综合狠狠躁的推荐| 免费成人av| 欧美成年人网| 99re6这里只有精品视频在线观看| 亚洲精品日韩激情在线电影| 亚洲免费观看高清完整版在线观看| 最近中文字幕日韩精品 | 99精品国产在热久久婷婷| 99亚洲精品| 欧美一二区视频| 欧美gay视频激情| 在线视频亚洲| 欧美成年人视频网站| 国产精品久久久久毛片软件| 精品动漫一区| 亚洲欧美美女| 欧美韩国日本一区| 午夜精品亚洲| 欧美三级中文字幕在线观看| 国产精品影音先锋| 亚洲乱码精品一二三四区日韩在线 | 性欧美xxxx大乳国产app| 久久久精品日韩| 亚洲国产精品精华液2区45| 亚洲午夜精品一区二区| 噜噜噜在线观看免费视频日韩| 国产精品福利在线| 一卡二卡3卡四卡高清精品视频| 久久精品午夜| 亚洲一级黄色| 欧美日韩一区二区三区免费| 亚洲成人中文| 欧美在线视频导航| 夜夜嗨一区二区| 美日韩精品免费观看视频| 国产亚洲在线| 久久国内精品自在自线400部| 亚洲久久在线| 欧美国产视频在线| 亚洲国产一区二区精品专区| 久久夜色精品国产欧美乱极品| 一本久久青青| 亚洲综合三区| 亚洲黄色有码视频| 久久亚洲综合色| 国产午夜精品麻豆| 午夜精品一区二区三区在线视| 亚洲久久在线| 欧美日韩一卡二卡| 亚洲午夜在线| 中文精品视频| 国产精品毛片a∨一区二区三区|国| 99pao成人国产永久免费视频| 欧美成人在线影院| 狂野欧美激情性xxxx欧美| 一区二区在线视频播放| 久久综合中文| 麻豆成人在线播放| 亚洲日本va午夜在线电影| 亚洲电影免费观看高清完整版 | 欧美 日韩 国产 一区| 亚洲精品免费电影| 日韩午夜三级在线| 国产精品久久久久久久久久久久久 | 男人的天堂亚洲在线| 久久国产婷婷国产香蕉| 伊人精品成人久久综合软件| 久热成人在线视频| 欧美连裤袜在线视频| 亚洲综合精品自拍| 欧美在线观看一二区| 亚洲国产成人精品久久| 亚洲精品欧美精品| 国产欧美韩国高清| 欧美激情中文字幕一区二区| 欧美肉体xxxx裸体137大胆| 欧美一级电影久久| 免费成人毛片| 午夜精品久久久久久久久| 久久激情综合网| 99精品国产99久久久久久福利| 亚洲图片激情小说| 亚洲成人影音| 亚洲专区欧美专区| 在线观看91精品国产入口| 亚洲精品一区久久久久久| 国产麻豆精品theporn| 欧美成人免费va影院高清| 欧美视频在线观看| 鲁大师影院一区二区三区| 欧美日韩精品在线观看| 久久久国产成人精品| 欧美日韩色婷婷| 麻豆精品在线播放| 国产精品久久久久久一区二区三区 | 久久精品国产欧美亚洲人人爽| 久久久久网址| 欧美精品一区二区在线播放| 欧美一区二区三区视频在线观看 | 欧美午夜一区二区| 老司机午夜精品视频在线观看| 欧美日韩一区在线观看| 另类尿喷潮videofree| 国产精品嫩草影院av蜜臀| 亚洲日本电影在线| 亚洲第一免费播放区| 亚洲欧美美女| 一本色道久久99精品综合 | 久久综合五月| 久久久高清一区二区三区| 国产精品丝袜久久久久久app| 亚洲国产精品免费| 亚洲高清成人| 久久av资源网站| 欧美在线精品免播放器视频| 欧美日韩精品在线播放| 亚洲国产精品成人综合色在线婷婷| 国内精品久久久久影院色 | 一区二区三区四区国产| 久久精品国产在热久久 | 精品91在线| 久久国产精品99精品国产| 久久成人精品| 国产欧美在线观看一区| 亚洲一区二区三区久久| 亚洲欧美日韩国产| 欧美视频一区在线| 亚洲性夜色噜噜噜7777| 亚洲欧美日韩国产一区二区| 欧美日韩一区免费| 亚洲视频免费看| 午夜精品在线视频| 国产欧美日韩视频一区二区| 亚洲欧美日韩系列| 久久国产99| 精品999网站| 久久久久.com| 亚洲电影一级黄| 亚洲视频欧洲视频| 国产欧美日韩综合| 久久久午夜电影| 欧美激情免费在线| 一区二区三区不卡视频在线观看 | 亚洲永久视频| 久久精品国产亚洲一区二区三区| 国产亚洲精品aa| 久久久久亚洲综合| 欧美国产一区二区三区激情无套| 91久久精品国产| 国产精品久久二区| 久久久综合香蕉尹人综合网| 亚洲国产欧美一区二区三区同亚洲 | 久久久蜜桃一区二区人| 免费影视亚洲| 99在线|亚洲一区二区| 国产精品久久久久91| 欧美一区深夜视频| 亚洲经典三级| 香蕉久久久久久久av网站| 国产综合视频| 欧美日本一区二区三区| 亚洲午夜激情网页| 欧美激情视频给我| 欧美一区二区三区免费观看| 尤物99国产成人精品视频| 欧美日韩国产免费观看| 欧美在线黄色| 日韩亚洲在线| 免费观看亚洲视频大全| 亚洲欧美日韩一区在线观看| 在线观看国产日韩| 国产精品五月天| 欧美理论大片| 免费观看成人网| 欧美一区二区视频在线观看2020| 亚洲国产视频a| 噜噜噜噜噜久久久久久91| 亚洲欧美在线免费| 在线一区二区日韩| 亚洲人精品午夜| 在线观看91久久久久久| 国产伦精品一区二区三区免费 | 久久亚洲国产精品日日av夜夜| av成人手机在线| 亚洲国产午夜| 欧美电影免费观看大全| 欧美伊人精品成人久久综合97| 一区二区三区免费观看| 亚洲人成在线观看一区二区|