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

隨筆 - 87  文章 - 279  trackbacks - 0
<2006年10月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

潛心看書研究!

常用鏈接

留言簿(19)

隨筆分類(81)

文章分類(89)

相冊

ACM OJ

My friends

搜索

  •  

積分與排名

  • 積分 - 221137
  • 排名 - 118

最新評論

閱讀排行榜

評論排行榜

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:28 閱讀(830) 評論(4)  編輯 收藏 引用 所屬分類: ACM題目

FeedBack:
# re: pku2985 第一次用兩種數據結構解題, 并查集+線段樹 2006-09-22 13:24 A3
可否講解一下線段樹部分  回復  更多評論
  
# re: pku2985 第一次用兩種數據結構解題, 并查集+線段樹 2006-09-22 17:47 
把區間劃出來, 節點(非葉子), 表示該區間里面含有多少個元素。
如果 n = 10;
而集合大小分別是 1, 1, 2, 6;

則 區間(1-10) = 4; 區間(1-5) = 3;

就這樣用線段樹動態維護每次集合合并后的集合大小。

初始化(1-10) = 10;
因為開始時, 集合大小為1, 1, 1, 1, 1, 1, 1, 1, 1, 1  回復  更多評論
  
# re: pku2985 第一次用兩種數據結構解題, 并查集+線段樹 2006-09-24 19:53 Optimistic
偶的第一次呢 靜待。。。  回復  更多評論
  
# re: pku2985 第一次用兩種數據結構解題, 并查集+線段樹 2006-09-24 22:23 
+U ^_^  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 久久久91精品| 亚洲精品社区| 欧美黑人在线播放| 一区二区欧美精品| 亚洲靠逼com| 国产精品久久久久aaaa| 亚洲欧美国产高清| 欧美在线播放高清精品| 伊人精品在线| 亚洲国产影院| 欧美日韩国产成人在线91| 亚洲私人影院在线观看| 亚洲一区二区三区影院| 国语精品中文字幕| 亚洲激情视频在线| 国产精品欧美久久| 免费在线观看精品| 欧美日韩1区2区| 欧美一区二区三区在线免费观看| 午夜精品久久一牛影视| 亚洲大胆av| 日韩视频在线观看免费| 国产日韩精品入口| 欧美福利电影在线观看| 欧美亚洲第一页| 蜜臀av国产精品久久久久| 欧美激情1区2区| 欧美制服第一页| 欧美本精品男人aⅴ天堂| 午夜日韩av| 欧美jjzz| 久久综合色综合88| 欧美视频一区在线| 欧美黄网免费在线观看| 国产精品视频一| 亚洲国产精品久久久久婷婷老年 | 亚洲精品国精品久久99热| 欧美午夜精品久久久久久超碰| 久久午夜精品一区二区| 欧美日韩国产综合一区二区| 久久久久看片| 国产精品成av人在线视午夜片| 久久精品国产欧美激情| 欧美日本免费| 蜜臀久久99精品久久久画质超高清| 欧美日韩 国产精品| 欧美jizzhd精品欧美巨大免费| 国产精品国内视频| 亚洲人成在线观看| 1000部精品久久久久久久久| 亚洲一区在线播放| 亚洲最快最全在线视频| 老鸭窝91久久精品色噜噜导演| 欧美一级一区| 国产精品亚洲网站| aa日韩免费精品视频一| 亚洲卡通欧美制服中文| 久久综合伊人77777麻豆| 久久九九久精品国产免费直播| 国产精品s色| 99在线热播精品免费99热| 亚洲精品日产精品乱码不卡| 久色成人在线| 欧美黄色网络| 91久久精品网| 欧美1区2区3区| 亚洲成人在线免费| 欧美喷水视频| 欧美激情网站在线观看| 亚洲国产aⅴ天堂久久| 久久精品国产亚洲a| 久久人人97超碰国产公开结果 | 久久一区二区三区av| 久久久精彩视频| 国产揄拍国内精品对白| 久久国产主播精品| 蜜桃av一区| 亚洲区一区二区三区| 欧美精选一区| 亚洲色图在线视频| 午夜综合激情| 国产亚洲欧美日韩美女| 久久久精品tv| 欧美激情视频网站| 一本色道久久综合亚洲精品按摩| 欧美精品电影| 亚洲一区视频| 久久久一二三| 日韩一级精品| 国产精品热久久久久夜色精品三区| 亚洲一区在线直播| 久热精品视频| 艳女tv在线观看国产一区| 国产精品久久久久久久久动漫| 亚洲欧美综合v| 欧美激情精品久久久久久久变态| 99国产一区| 国产模特精品视频久久久久| 久久久人成影片一区二区三区| 亚洲国产成人在线播放| 一区二区三区国产| 国产亚洲毛片在线| 欧美激情1区2区3区| 亚洲伊人久久综合| 欧美国产在线观看| 午夜精品亚洲一区二区三区嫩草| 韩国一区二区在线观看| 欧美日韩第一页| 欧美中日韩免费视频| 亚洲精品网址在线观看| 久久久久久国产精品mv| 99re66热这里只有精品3直播| 国产精品女主播| 免费成人在线观看视频| 亚洲欧美经典视频| 亚洲国内自拍| 免费观看成人| 亚洲欧美日韩精品一区二区| 亚洲大胆美女视频| 国产日韩欧美亚洲一区| 欧美华人在线视频| 久久久www成人免费毛片麻豆| 99视频精品全国免费| 欧美大片网址| 久久免费视频一区| 欧美一区视频在线| 亚洲神马久久| 亚洲精品永久免费精品| 一区二区三区在线免费视频| 国产精品第2页| 欧美片在线观看| 蜜桃av综合| 久久久国产精彩视频美女艺术照福利| 在线综合欧美| 99一区二区| 99国产精品99久久久久久| 亚洲福利国产精品| 猛干欧美女孩| 老**午夜毛片一区二区三区| 欧美一区二区高清| 亚洲欧美日韩视频一区| 一区二区三区精品视频| 亚洲精品九九| 99re成人精品视频| 亚洲精选久久| 一区二区欧美日韩| 在线视频日本亚洲性| 一区二区冒白浆视频| 999亚洲国产精| 一区二区三区.www| 亚洲一区二区三| 亚洲欧美日韩国产一区| 欧美亚洲一区在线| 欧美在线高清| 久久免费视频观看| 欧美成人精品在线播放| 91久久久久| 在线亚洲国产精品网站| 亚洲欧美日韩中文播放| 欧美一区二区视频在线观看| 欧美一区综合| 久久综合网hezyo| 欧美激情一区| 欧美日韩视频在线一区二区观看视频| 欧美日韩在线不卡| 国产美女精品免费电影| 伊人久久综合| 一本色道久久88综合日韩精品| 亚洲午夜性刺激影院| 欧美在线免费一级片| 久久人人精品| 亚洲精选视频在线| 亚洲一区二区三区四区五区黄| 午夜欧美精品久久久久久久| 久久久91精品国产| 欧美精品一区二区三区四区 | 久久久久久久综合色一本| 毛片一区二区三区| 欧美亚州韩日在线看免费版国语版| 国产精品人成在线观看免费| 国内在线观看一区二区三区 | 国产精品网站一区| 一区免费视频| 亚洲一区影音先锋| 免费av成人在线| 在线亚洲精品| 久久亚洲精选| 国产精品―色哟哟| 日韩视频永久免费观看| 香蕉成人伊视频在线观看| 免费成人高清| 亚洲一线二线三线久久久| 久久伊人精品天天| 国产女人aaa级久久久级| 91久久午夜| 久久久久国产精品www| 99国产精品视频免费观看一公开| 久久久久久精| 国产精品亚洲综合一区在线观看|