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

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

潛心看書研究!

常用鏈接

留言簿(19)

隨筆分類(81)

文章分類(89)

相冊

ACM OJ

My friends

搜索

  •  

積分與排名

  • 積分 - 220435
  • 排名 - 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>
              性欧美长视频| 久久人人爽人人爽爽久久| 一本色道久久综合精品竹菊| 新67194成人永久网站| 欧美成人综合网站| 欧美一区成人| 国产精品久久久久aaaa九色| 亚洲九九爱视频| 老色批av在线精品| 久久精品91久久久久久再现| 国产精品网站一区| 亚洲欧美日韩综合aⅴ视频| 亚洲人成网站色ww在线| 欧美亚洲视频| 国产午夜精品理论片a级大结局 | 亚洲日本视频| 裸体一区二区| 久久精品国产一区二区电影| 国产日韩精品一区| 欧美尤物一区| 欧美一级一区| 国产一区日韩一区| 国产精品国产三级欧美二区| 一区二区高清| 999亚洲国产精| 欧美视频导航| 午夜视频一区二区| 午夜精品99久久免费| 国产日韩在线亚洲字幕中文| 久久久久国内| 久久天天综合| 亚洲乱码精品一二三四区日韩在线| 欧美不卡视频一区| 欧美不卡高清| 亚洲性图久久| 性欧美18~19sex高清播放| 狠狠久久五月精品中文字幕| 欧美激情一二三区| 欧美日韩人人澡狠狠躁视频| 亚洲愉拍自拍另类高清精品| 午夜精品美女久久久久av福利| 国内免费精品永久在线视频| 欧美成人精品一区二区| 欧美日韩免费观看一区| 欧美亚洲日本一区| 久久亚洲国产成人| 日韩午夜电影在线观看| 亚洲尤物视频在线| 在线观看视频一区二区| 日韩亚洲欧美中文三级| 国产日韩视频| 亚洲国产精品久久久久秋霞影院 | 亚洲综合日韩在线| 怡红院av一区二区三区| 亚洲国产你懂的| 国产精品日韩在线| 免费观看一级特黄欧美大片| 欧美久久成人| 久久久久久久久一区二区| 欧美www视频| 欧美一区二区三区精品电影| 欧美电影免费观看高清| 久久国产精品99国产精| 欧美成人免费一级人片100| 性色av一区二区三区在线观看| 久久亚裔精品欧美| 欧美一区二区三区免费视| 欧美国产三级| 欧美99在线视频观看| 国产精品久久婷婷六月丁香| 亚洲国产精品www| 韩国三级在线一区| 亚洲欧美日韩国产一区| 一区二区三区四区蜜桃| 另类春色校园亚洲| 久久精品国产免费观看| 欧美午夜一区二区福利视频| 亚洲国产欧美日韩| 在线播放一区| 欧美在线关看| 欧美一激情一区二区三区| 欧美日韩黄视频| 亚洲国产精品久久人人爱蜜臀| 伊人狠狠色丁香综合尤物| 裸体歌舞表演一区二区| 国产精品视频免费观看| 一区二区毛片| 一区二区欧美国产| 欧美精品一区二区三区在线看午夜| 美女视频黄a大片欧美| 精品999久久久| 欧美主播一区二区三区| 久久精品国产亚洲aⅴ| 国产欧美亚洲一区| 正在播放亚洲一区| 亚洲一区中文| 国产精品视频免费| 亚洲欧美日韩网| 久久精品国产免费看久久精品| 国产美女精品一区二区三区| 亚洲一区二区四区| 欧美亚洲日本国产| 国产午夜精品一区二区三区视频 | 久久在精品线影院精品国产| 国产精品久久久久久影视 | 一本大道久久精品懂色aⅴ| 夜夜狂射影院欧美极品| 欧美日韩国产区一| 亚洲素人一区二区| 久久精品二区| 亚洲国产精品久久久久秋霞不卡| 久久午夜电影网| 欧美国产在线观看| 日韩视频在线一区二区三区| 欧美激情自拍| 在线视频欧美日韩精品| 久久激情久久| 亚洲茄子视频| 欧美日韩中文字幕在线视频| 亚洲欧美经典视频| 蜜桃伊人久久| 亚洲黑丝在线| 欧美三级欧美一级| 欧美在线精品一区| 亚洲电影下载| 亚洲专区在线| 国内伊人久久久久久网站视频 | 免费视频久久| 一本色道久久综合| 久久久久久精| 亚洲精品在线一区二区| 国产精品国码视频| 久久精品亚洲精品| 亚洲国产精品免费| 性久久久久久久久| 在线观看日韩精品| 国产精品第十页| 久久九九久精品国产免费直播| 亚洲韩国一区二区三区| 午夜日韩视频| 亚洲精选在线| 精品二区视频| 欧美性一区二区| 欧美成人黄色小视频| 先锋影音久久久| 日韩午夜在线电影| 亚洲伦理精品| 国产日韩欧美一二三区| 欧美日韩国产色站一区二区三区| 性欧美1819性猛交| 亚洲人成在线影院| 国内精品国产成人| 久久久久综合一区二区三区| 亚洲精品久久久久久久久久久| 欧美日韩专区| 在线精品视频一区二区三四| 久久精品国产69国产精品亚洲| 欧美激情精品久久久六区热门 | 午夜宅男久久久| 欧美剧在线观看| 欧美国产日韩一区二区| 亚洲激情国产| 久久蜜桃资源一区二区老牛| 久久久久99精品国产片| 欧美日韩亚洲一区二区三区四区| 亚洲欧美中文另类| 国内在线观看一区二区三区| 久久九九99视频| 亚洲三级观看| 中文在线资源观看视频网站免费不卡| 免费成人av| 91久久精品国产91久久性色tv| 亚洲日本va午夜在线电影 | 欧美在线视频免费| 国产日韩欧美一区二区| 久久精品免费播放| 蜜臀a∨国产成人精品| 亚洲精品一区在线| 国产精品免费一区豆花| 久久精品欧美日韩| 亚洲国产精品欧美一二99| 在线视频中文亚洲| 国内精品免费在线观看| 欧美一区二区三区在线视频| 欧美午夜免费| 久久久久亚洲综合| 99国产精品国产精品久久| 蜜臀av性久久久久蜜臀aⅴ四虎| 一区二区三区高清不卡| 亚洲一级影院| 久久精品国产清自在天天线| 一区二区三区在线免费观看| 欧美日产国产成人免费图片| 在线日韩av片| 欧美激情一二区| 欧美在线视屏 | 亚洲欧美精品一区| 亚洲第一网站免费视频| 国产精品久久久久影院色老大 | 亚洲经典在线看|