日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDOJ 1213 HDU 1213 How Many Tables ACM 1213 IN HDU

發布時間:2025/7/25 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDOJ 1213 HDU 1213 How Many Tables ACM 1213 IN HDU 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MiYu原創, 轉帖請注明 : 轉載自?______________白白の屋

題目地址:
?????????http://acm.hdu.edu.cn/showproblem.php?pid=1213
題目描述:
How?Many?Tables

Time?Limit:?
2000/1000?MS?(Java/Others)????Memory?Limit:?65536/32768?K?(Java/Others)
Total?Submission(s):?
2337????Accepted?Submission(s):?1033


Problem?Description
Today?
is?Ignatius'?birthday.?He?invites?a?lot?of?friends.?Now?it's?dinner?time.?Ignatius?wants?to?know?how?many?tables?he?needs?at?least.?You?have?to?notice?that?not?all?the?friends?know?each?other,?and?all?the?friends?do?not?want?to?stay?with?strangers.

One?important?rule?
for?this?problem?is?that?if?I?tell?you?A?knows?B,?and?B?knows?C,?that?means?A,?B,?C?know?each?other,?so?they?can?stay?in?one?table.

For?example:?If?I?tell?you?A?knows?B,?B?knows?C,?and?D?knows?E,?so?A,?B,?C?can?stay?
in?one?table,?and?D,?E?have?to?stay?in?the?other?one.?So?Ignatius?needs?2?tables?at?least.
?

Input
The?input?starts?with?an?integer?T(
1<=T<=25)?which?indicate?the?number?of?test?cases.?Then?T?test?cases?follow.?Each?test?case?starts?with?two?integers?N?and?M(1<=N,M<=1000).?N?indicates?the?number?of?friends,?the?friends?are?marked?from?1?to?N.?Then?M?lines?follow.?Each?line?consists?of?two?integers?A?and?B(A!=B),?that?means?friend?A?and?friend?B?know?each?other.?There?will?be?a?blank?line?between?two?cases.
?

Output
For?each?test?
case,?just?output?how?many?tables?Ignatius?needs?at?least.?Do?NOT?print?any?blanks.
?

Sample?Input
2
5?3
1?2
2?3
4?5

5?1
2?5
?

Sample?Output
2
4

題目分析:
并查集中的超級水題,? 只要判斷集合的個數就可以了....................
代碼如下:
MiYu原創, 轉帖請注明 : 轉載自?______________白白の屋

#include?
<iostream>
using?namespace?std;
typedef?
struct?{
?????
int?parent;
?????
int?cnt;???
}Tset;??

typedef?
struct?treeUFS{
???????
public:
??????????????treeUFS(
int?n?=?0):N(n+1)?{?set?=?new?Tset[N];??for?(?int?i?=?0;?i?!=?N;?++?i)?
??????????????????????????????????????????????????????????????????
set[i].parent?=?i,set[i].cnt?=?1;?
????????????????????????????????????????}
??????????????
~treeUFS()?{?delete?[]?set;?};
??????????????
int?find?(?int?x?){?int?r?=?x;?while?(?set[r].parent?!=?r?)?//循環結束,則找到根節點
????????????????????????????????????????????????????r?=?set[r].parent;?int?i?=?x;
?????????????????????????????????????????????
//本循環修改查找路徑中所有節點
?????????????????????????????????????????????while?(?i?!=?r)?{???
?????????????????????????????????????????????????
int?j?=?set[i].parent;?set[i].parent?=?r;?i?=?j;
?????????????????????????????????????????????}?
???????????????????????????????????
return?r;
????????????????????????????????}
??????????????
void?init?()?{?for?(?int?i?=?0;?i?!=?N;?++?i)?set[i].parent?=?i,set[i].cnt?=?1;??}
??????????????
int?getSetCount?(?int?x?){?return?set[?find(x)?].cnt;?}
??????????????
void?Merge(?int?x,int?y?){??x?=?find?(?x?);??y?=?find?(?y?);??
???????????????????????????????????????????
if?(?x?==?y?)?return;
???????????????????????????????????????????
if?(?set[x].cnt?>?set[y].cnt?){
????????????????????????????????????????????????
set[y].parent?=?x;
????????????????????????????????????????????????
set[x].cnt?+=?set[y].cnt;
???????????????????????????????????????????}
???????????????????????????????????????????
else{???set[x].parent?=?y;
???????????????????????????????????????????????????
set[y].cnt?+=?set[x].cnt;????????
???????????????????????????????????????????????}
????????????????????????????????????????}
???????
private:
??????????????Tset?
*set;
??????????????
int?N;?????????
}treeUFS;

int?main?()
{
????
int?T;
????scanf?(?
"%d",&T?);
????
while?(?T?--?)
????{
???????????
int?N,M;
???????????scanf?(?
"%d%d",&N,&M?);
???????????treeUFS?UFS?(?N?);?
???????????
for?(?int?i?=?1;?i?<=?M;?++?i?)
???????????{
?????????????????
int?a,b;
?????????????????scanf?(?
"%d%d",&a,&b?);
?????????????????UFS.Merge?(?a,b?);?
???????????}
???????????
int?nCount?=?0;
???????????
for?(?int?i?=?1;?i?<=?N;?++?i?)
???????????{
????????????????
if?(?UFS.find?(i)?==?i?)
????????????????{
?????????????????????nCount?
++;?
????????????????}
???????????}?
???????????printf?(?
"%d\n",nCount?);
????}
????
return?0;?
}

轉載于:https://www.cnblogs.com/MiYu/archive/2010/08/18/1802673.html

總結

以上是生活随笔為你收集整理的HDOJ 1213 HDU 1213 How Many Tables ACM 1213 IN HDU的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。