HDOJ 1213 HDU 1213 How Many Tables ACM 1213 IN HDU
生活随笔
收集整理的這篇文章主要介紹了
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;?
}
題目地址:
?????????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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 加了try-catch也能自动定位到异常
- 下一篇: java future设计模式