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

隨筆 - 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>
              欧美性猛片xxxx免费看久爱| 欧美久久电影| 好吊一区二区三区| 麻豆国产va免费精品高清在线| 亚洲欧美视频在线观看视频| 国产三级欧美三级日产三级99| 久久国内精品视频| 久久久777| 99re66热这里只有精品3直播 | 午夜精品久久久久久久99樱桃| 在线视频精品| 国内精品99| 亚洲高清资源综合久久精品| 美国成人直播| 亚洲一级网站| 久久久蜜桃精品| 日韩午夜在线电影| 午夜久久久久久| 亚洲国产精品久久| 夜夜爽av福利精品导航| 国产一区二区三区av电影| 欧美成人免费在线观看| 欧美午夜片在线免费观看| 久久福利毛片| 欧美精品一区二区三区蜜臀 | 亚洲欧洲视频| 性欧美8khd高清极品| 亚洲麻豆一区| 亚洲欧美在线视频观看| 日韩一级片网址| 久久精品欧美| 亚洲一区二区三区在线看 | 亚洲欧美国产日韩天堂区| 在线免费精品视频| 亚洲视频精选在线| 亚洲精品免费电影| 久久久久国产精品一区| 亚洲欧美激情视频在线观看一区二区三区| 欧美在线不卡视频| 亚洲视频一二三| 欧美电影打屁股sp| 久久婷婷影院| 国产日韩欧美高清| 99天天综合性| 99re热这里只有精品免费视频| 先锋影音一区二区三区| 在线一区二区视频| 欧美国产高潮xxxx1819| 免费久久精品视频| 国产日韩在线不卡| 亚洲免费在线看| 亚洲一区二区在线视频| 欧美日韩国产精品一卡| 欧美成人午夜激情视频| 激情亚洲成人| 久久精品官网| 久久婷婷国产综合精品青草| 国产女人水真多18毛片18精品视频| 亚洲毛片一区二区| 99视频精品免费观看| 美女精品在线观看| 亚洲二区免费| 99精品国产热久久91蜜凸| 欧美成人免费观看| 亚洲国产日韩在线一区模特| 亚洲高清视频在线观看| 免费日韩成人| 亚洲国产精品www| 亚洲精品免费在线| 欧美精品久久久久久久| 亚洲人午夜精品免费| 亚洲伦理精品| 欧美日韩一区二区三区在线看 | 久久久国产精品一区| 国产欧美一区二区精品仙草咪| 亚洲一区二区三区久久| 欧美一区二区精美| 国产一区二区三区高清在线观看| 午夜国产一区| 另类av导航| 亚洲欧洲精品一区二区三区| 欧美日韩1区2区| 亚洲在线中文字幕| 久久综合综合久久综合| 最新69国产成人精品视频免费| 蜜桃久久精品乱码一区二区| 91久久国产精品91久久性色| 亚洲一区二区久久| 国产在线观看精品一区二区三区 | 日韩写真视频在线观看| 欧美一区二区三区免费大片| 国产一级久久| 欧美成人免费一级人片100| 日韩视频在线你懂得| 亚洲免费视频中文字幕| 一区二区视频在线观看| 欧美精品在线观看一区二区| 亚洲性感激情| 欧美岛国在线观看| 亚洲国产日韩在线| 免费成人高清| 亚洲视频综合在线| 欧美国产一区二区| 亚洲在线不卡| 亚洲日本va午夜在线影院| 国产精品99免费看| 久久久午夜视频| 亚洲一区二区视频在线观看| 免费国产一区二区| 欧美一区成人| 亚洲婷婷免费| 亚洲高清自拍| 国产日韩亚洲| 欧美网站在线观看| 老司机午夜精品视频| 亚洲日本中文| 久久精品国产亚洲高清剧情介绍| 亚洲精选国产| 永久免费精品影视网站| 国产欧美va欧美va香蕉在| 欧美伦理91i| 欧美电影电视剧在线观看| 欧美一区二区视频在线观看| 一区二区冒白浆视频| 欧美激情视频免费观看| 久久综合电影一区| 欧美在线视频a| 午夜精品久久久久久久99热浪潮| 99re亚洲国产精品| 在线观看欧美日韩国产| 国产麻豆成人精品| 欧美激情一区二区三区全黄 | 久久久久成人精品| 亚洲欧洲99久久| 亚洲免费一级电影| 在线亚洲观看| 亚洲影视在线| 亚洲一区三区在线观看| 亚洲专区一区| 午夜久久久久| 久久超碰97人人做人人爱| 性欧美1819性猛交| 久久成人精品电影| 久久福利精品| 久久久99精品免费观看不卡| 性做久久久久久久免费看| 欧美一级成年大片在线观看| 亚洲天堂网在线观看| 亚洲免费人成在线视频观看| 亚洲小说欧美另类社区| 午夜在线精品| 久久精品视频在线免费观看| 久久久久久久久久看片| 老司机精品福利视频| 蜜桃久久av| 欧美日韩免费在线观看| 国产精品高潮呻吟视频| 国产视频一区欧美| 一区免费观看视频| 亚洲精品日韩在线| 亚洲淫性视频| 久久午夜激情| 亚洲黄色毛片| 亚洲一区二区在线| 久久久久久久久久久久久女国产乱| 久久三级视频| 欧美日韩在线播放三区| 国产欧美一区二区三区在线老狼 | 亚洲一区欧美二区| 久久精品91久久久久久再现| 欧美成人高清| 日韩亚洲精品视频| 久久精品99| 欧美日韩18| 国内精品久久久久久| 99国产精品视频免费观看一公开| 亚洲免费一级电影| 欧美成人福利视频| 亚洲一区二区三区四区五区黄| 久久精品亚洲| 欧美日韩午夜精品| 韩日在线一区| 亚洲一区二区三区777| 久久偷窥视频| 亚洲亚洲精品在线观看| 久久久国产一区二区| 欧美性jizz18性欧美| 揄拍成人国产精品视频| 亚洲综合第一| 亚洲夫妻自拍| 香蕉av福利精品导航| 欧美日韩成人精品| 一区免费视频| 久久精品国产亚洲一区二区三区| 亚洲精品在线免费| 久久久一区二区三区| 国产精品国产三级欧美二区| 亚洲国产精品综合| 妖精视频成人观看www| 免费观看日韩av|