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

隨筆 - 87  文章 - 279  trackbacks - 0
<2006年8月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

潛心看書研究!

常用鏈接

留言簿(19)

隨筆分類(81)

文章分類(89)

相冊

ACM OJ

My friends

搜索

  •  

積分與排名

  • 積分 - 220442
  • 排名 - 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 閱讀(833) 評論(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>
              国产欧美一二三区| 亚洲巨乳在线| 亚洲黄页视频免费观看| 蜜臀久久99精品久久久画质超高清| 亚洲精品视频一区| 精品盗摄一区二区三区| 国产精品每日更新| 国产精品日韩在线一区| 欧美a级一区二区| 午夜在线观看欧美| 欧美日本韩国一区二区三区| 亚洲女优在线| 久久综合五月| 久久夜色精品| 久久久久久亚洲精品杨幂换脸 | 在线观看国产精品网站| 久久精品一区二区| 亚洲欧美精品在线观看| 欧美影院精品一区| 久久嫩草精品久久久精品一| 久久久国产一区二区| 亚洲影院免费观看| 欧美亚洲免费电影| 亚洲午夜激情免费视频| 在线亚洲伦理| 香蕉乱码成人久久天堂爱免费| 亚洲专区欧美专区| 欧美一区二区久久久| 这里是久久伊人| 久久视频国产精品免费视频在线| 久久夜色精品国产噜噜av| 亚洲大片av| 浪潮色综合久久天堂| 久久精品国产成人| 欧美四级在线| 国产精品99一区二区| 尤物99国产成人精品视频| 国产亚洲精品7777| 亚洲综合社区| 亚洲一区二区三区成人在线视频精品 | 欧美成人在线网站| 国产自产在线视频一区| 精品动漫一区| 欧美影院视频| 日韩视频免费观看| 国产精品户外野外| 99re热精品| 久久综合九色综合网站| 亚洲小说欧美另类社区| 欧美日韩国产不卡在线看| 亚洲国产日韩一区二区| 老司机精品视频网站| 久久久精品网| 国产自产女人91一区在线观看| 国内精品美女av在线播放| 亚洲视频电影图片偷拍一区| 亚洲国产导航| 亚洲一级黄色片| 欧美大片91| 国产精品99一区| 亚洲视频一区二区| 亚洲欧美国产高清| 国产日产精品一区二区三区四区的观看方式| 日韩一级精品| 欧美自拍丝袜亚洲| 国产一区二区在线观看免费| 久久人人97超碰人人澡爱香蕉| 一本在线高清不卡dvd| 国产精品一区久久久久| 欧美国产激情二区三区| 国产欧美精品日韩区二区麻豆天美| 欧美福利一区| 欧美中日韩免费视频| 亚洲在线观看视频网站| 欧美日韩在线一二三| 欧美电影在线免费观看网站| 红桃视频成人| 先锋影音久久| 欧美综合77777色婷婷| 国产精品区免费视频| 欧美亚洲成人免费| 亚洲欧美日韩精品久久久| 亚洲人成小说网站色在线| 一区二区三区欧美日韩| 国产人妖伪娘一区91| 一本色道久久综合亚洲精品不卡| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲国产日韩在线一区模特| 午夜精品视频在线观看| 久久av一区二区三区漫画| 欧美人在线视频| 欧美大片免费久久精品三p | 国产精品尤物| 欧美黄色免费| 国内精品国产成人| 免费欧美视频| 伊人成人在线视频| 欧美国产日产韩国视频| 亚洲精品视频啊美女在线直播| 99精品视频一区二区三区| 欧美激情亚洲综合一区| 999在线观看精品免费不卡网站| 精品成人一区二区三区四区| 一区二区三区日韩精品| 亚洲综合成人在线| 91久久久精品| 亚洲第一在线综合在线| 久久亚洲欧美| 一区二区三区色| 性视频1819p久久| 国产日韩欧美在线视频观看| 久久久www成人免费精品| 亚洲福利国产| 一区二区在线观看视频| 国产精品v片在线观看不卡| 玖玖玖免费嫩草在线影院一区| 亚洲国产欧美一区二区三区丁香婷| 亚洲欧美日韩精品久久奇米色影视| 在线播放不卡| 国产精品一区二区久久| 欧美成人福利视频| 一区二区三区久久久| 亚洲精品自在久久| 亚洲夫妻自拍| 亚洲激情另类| 亚洲精选国产| 欧美激情视频在线免费观看 欧美视频免费一| 久久亚洲国产成人| 欧美成人第一页| 亚洲国产一区二区三区高清| 欧美一区二区三区视频在线观看 | 国产精品高潮在线| 久久青青草原一区二区| 久久人人看视频| 久久久亚洲高清| 久久久一二三| 欧美一区二区性| 麻豆av福利av久久av| 亚洲欧美日韩精品综合在线观看| 亚洲国产一二三| 日韩一区二区精品| 亚洲激情在线观看视频免费| 99精品热视频| 久久免费视频这里只有精品| 欧美成人综合| 国产精品久久久久久亚洲毛片 | 欧美激情在线免费观看| 欧美亚洲在线播放| 欧美中在线观看| 麻豆精品视频在线观看| 国产精品一区二区久激情瑜伽| 国产亚洲视频在线观看| 在线电影一区| 欧美福利影院| 亚洲第一区在线| 欧美高清视频一区二区| 99在线精品视频| 欧美无乱码久久久免费午夜一区| 国产一区二区久久| 欧美国产1区2区| 狠狠色丁香婷婷综合久久片| 欧美在线3区| 欧美日韩99| 久久精品成人一区二区三区| 这里是久久伊人| 葵司免费一区二区三区四区五区| 国产精品久久久久久亚洲毛片| 亚洲欧美日韩国产中文| 免费观看一区| 久久精品卡一| 免费亚洲电影在线观看| 亚洲黄色高清| 免费成人黄色| 欧美国产日韩亚洲一区| 依依成人综合视频| 鲁大师影院一区二区三区| 久久久欧美精品| 一区二区亚洲欧洲国产日韩| 久久久久免费视频| 狂野欧美一区| 亚洲一区自拍| 午夜久久tv| 亚洲高清资源| 99伊人成综合| 国产精品揄拍一区二区| 午夜一级久久| 亚洲精品男同| 最新国产の精品合集bt伙计| 亚洲最新视频在线播放| 国产自产v一区二区三区c| 日韩视频精品| 国内揄拍国内精品久久| 亚洲另类黄色| 亚洲韩国日本中文字幕| 亚洲一区二区三区久久| 国产手机视频精品| 六十路精品视频| 亚洲在线观看视频网站| 另类av一区二区| 久久婷婷蜜乳一本欲蜜臀|