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

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

潛心看書研究!

常用鏈接

留言簿(19)

隨筆分類(81)

文章分類(89)

相冊

ACM OJ

My friends

搜索

  •  

積分與排名

  • 積分 - 221136
  • 排名 - 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>
              欲色影视综合吧| 久久国产手机看片| 久久精品亚洲| 性做久久久久久久久| 欧美电影免费观看网站| 久久久亚洲人| 国产欧美精品一区| 亚洲午夜久久久久久久久电影网| 亚洲伦理自拍| 欧美xxx成人| 欧美激情视频给我| 亚洲国产精品一区在线观看不卡| 欧美永久精品| 久久亚洲欧美| 一区二区三区在线不卡| 午夜一级在线看亚洲| 欧美一区二区三区在线| 国产精品一区二区三区久久| 一卡二卡3卡四卡高清精品视频 | 欧美激情视频一区二区三区在线播放| 久久蜜桃精品| 黄色精品一区二区| 久久久一本精品99久久精品66| 久久久亚洲成人| 在线观看视频一区二区欧美日韩| 久久精品一区四区| 欧美91福利在线观看| 亚洲国产精品传媒在线观看| 蜜桃av综合| 亚洲国产欧美日韩精品| 亚洲美女毛片| 欧美性事免费在线观看| 亚洲伊人一本大道中文字幕| 久久成人精品无人区| 国产一区二区三区四区在线观看| 久久av二区| 亚洲丶国产丶欧美一区二区三区| 日韩图片一区| 国产精品免费视频xxxx| 久久国产欧美日韩精品| 欧美激情在线观看| 亚洲深夜福利视频| 国产日韩欧美一区二区三区在线观看| 欧美在线1区| 亚洲国产91| 香港久久久电影| 又紧又大又爽精品一区二区| 欧美精品一卡| 午夜久久福利| 91久久线看在观草草青青| 亚洲欧美成aⅴ人在线观看| 国产日韩专区| 欧美精品首页| 欧美亚洲一区二区在线| 亚洲风情在线资源站| 亚洲男人的天堂在线观看| 黄色在线一区| 欧美日韩在线一区二区三区| 性欧美18~19sex高清播放| 国产麻豆一精品一av一免费| 久久精品视频一| 一区二区高清在线| 免费看成人av| 亚洲欧美中文在线视频| 亚洲国产欧美另类丝袜| 国产精品久久久久一区| 欧美www视频| 欧美亚洲日本一区| 99re8这里有精品热视频免费 | 久久免费少妇高潮久久精品99| 最近中文字幕mv在线一区二区三区四区 | 亚洲片国产一区一级在线观看| 亚洲欧美日韩一区二区| 亚洲欧洲精品天堂一级| 国产一区二区日韩精品欧美精品| 欧美福利视频在线观看| 久久精品欧美| 午夜精品999| 一区二区三区国产精华| 欧美二区在线播放| 久久亚洲图片| 久久av资源网| 午夜精品久久久久久久蜜桃app | 另类尿喷潮videofree| 99re66热这里只有精品4| 欧美国产日本韩| 久久爱91午夜羞羞| 亚洲欧美日本伦理| 一本色道久久综合亚洲精品高清 | 久久婷婷麻豆| 欧美在线免费看| 亚洲综合精品一区二区| 99这里有精品| 日韩天堂在线视频| 亚洲伦理一区| 亚洲欧洲综合另类| 亚洲第一区在线| 欧美成人a视频| 免费成人av在线| 免费在线欧美黄色| 六月丁香综合| 免费视频一区| 欧美激情日韩| 亚洲激情啪啪| 亚洲伦伦在线| 一区二区三区免费在线观看| 一区二区黄色| 亚洲一区欧美二区| 午夜欧美不卡精品aaaaa| 亚洲欧美怡红院| 欧美在线观看日本一区| 久久精品一本久久99精品| 久久国产精品久久国产精品| 久久国产高清| 免费高清在线一区| 欧美激情乱人伦| 欧美色大人视频| 国产精品一区二区三区久久久| 亚洲第一精品影视| 亚洲国产专区校园欧美| 日韩视频在线一区| 亚洲制服少妇| 久久国产视频网| 免费日韩av| 欧美午夜大胆人体| 国产一区二区0| 亚洲精品1区| 亚洲天堂黄色| 欧美一区免费| 亚洲电影下载| 亚洲午夜羞羞片| 久久青草欧美一区二区三区| 欧美日韩国产不卡| 国产欧美日韩91| 最新国产の精品合集bt伙计| 亚洲一区二区高清| 久久在精品线影院精品国产| 亚洲精品久久久久久久久| 亚洲女女女同性video| 裸体女人亚洲精品一区| 国产精品美女午夜av| 在线日本成人| 欧美亚洲日本一区| 亚洲国产一区二区精品专区| 亚洲免费综合| 欧美福利一区| 国模私拍一区二区三区| 亚洲国产天堂网精品网站| 亚洲欧美激情诱惑| 亚洲电影激情视频网站| 性色av一区二区三区| 欧美区亚洲区| 亚洲大胆美女视频| 久久se精品一区二区| 91久久在线播放| 久久精品在这里| 亚洲第一伊人| 欧美一区二区三区在线观看| 欧美日韩另类字幕中文| 亚洲电影在线播放| 欧美在线免费看| 一本大道av伊人久久综合| 免费在线看一区| 狠狠色综合一区二区| 亚洲欧美日韩精品| 亚洲日本中文字幕| 久久人人97超碰国产公开结果| 国产精品高清免费在线观看| 亚洲精品小视频在线观看| 另类人畜视频在线| 欧美一区二区在线视频| 国产精品午夜国产小视频| 亚洲小说欧美另类婷婷| 亚洲人成亚洲人成在线观看图片 | 午夜在线一区二区| 99精品久久久| 欧美日韩精品免费在线观看视频| 亚洲国产日韩欧美一区二区三区| 久久精品夜夜夜夜久久| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲一区3d动漫同人无遮挡| 欧美精品一区二| 日韩视频一区二区三区在线播放免费观看| 猫咪成人在线观看| 久久精品男女| 在线观看91精品国产入口| 看欧美日韩国产| 久久久国产精品亚洲一区| 国一区二区在线观看| 久久久91精品国产一区二区精品| 亚洲女女女同性video| 国产精品一区二区久久久| 欧美一区二区三区精品电影| 亚洲一区二区三区涩| 国产精品日韩欧美大师| 午夜亚洲福利| 久久国产精品电影| 亚洲专区国产精品| 国产一区二区精品丝袜| 久久青草福利网站|