給定每個人的家庭成員和其自己名下的房產,請你統計出每個家庭的人口數、人均房產面積及房產套數。
輸入格式:
輸入第一行給出乙個正整數n(<=1000),隨後n行,每行按下列格式給出乙個人的房產:
編號 父 母 k 孩子1 ... 孩子k 房產套數 總面積
其中編號是每個人獨有的乙個4位數的編號;父和母分別是該編號對應的這個人的父母的編號(如果已經過世,則顯示-1);k(0<=k<=5)是該人的子女的個數;孩子i是其子女的編號。
輸出格式:
首先在第一行輸出家庭個數(所有有親屬關係的人都屬於同乙個家庭)。隨後按下列格式輸出每個家庭的資訊:
家庭成員的最小編號 家庭人口數 人均房產套數 人均房產面積
其中人均值要求保留小數點後3位。家庭資訊首先按人均面積降序輸出,若有並列,則按成員編號的公升序輸出。
1、觀察最後兩行會發現,2222和2333有相同的孩子——他們的關係沒法通過父母的關係網連線到一塊;
所以輸入孩子也應該連線進關係網中,如果在網中,孩子的父母也指向孩子的根節點;
否則,孩子指向他的該行的父或者母。
2/最後並查集記得進行再次全體進行尋根一次!
3、每次新開乙個b【】陣列時,記得立即初始化一次!!
4.還出了乙個段錯誤! 您的程式發生段錯誤,可能是陣列越界,堆疊溢位(比如,遞迴呼叫層數太多)等情況引起!
後來造了一組無厘頭的資料:
31222 0 23 0 3 300
0 3 -1 0 1 0
3 0 -1 0 1 0
然後程式就炸了,接著仔細想想——搞了半天我沒用上並查集的基本操作add()!!
ac程式:(附注釋)
#include#includeview code#include
#include
#include
#include
#include
#include
#include
#define maxn 400000
#define inf 0x3f3f3f3f
using
namespace
std;
#define n 10018
struct
nodea[n];
struct
familyb[n];
int tree[n];//
建立一棵並查集,tree[i]=x,x表示i的父節點
int vis[n];//
記錄i是否記錄進了人數
int getfa(int
x)void add(int x,inty)}
void init(family &x)
int fact1id(int
i)
return
num;
}int fact2(int
i)
if(a[i].mo!=-1&&vis[a[i].mo]==0
)
if(a[i].fa!=-1&&vis[a[i].fa]==0
)
for(int j=1;j<=a[i].k;j++)
return
num;
}bool
cmp(family x,family y)
intmain()
while(n--)
if(a[id].mo!=-1
) getfa(id);
scanf("%d
",&a[id].k);
for(int i=1;i<=a[id].k;i++)
scanf(
"%d%d
",&a[id].suit,&a[id].area);
}for(int i=0;i<=9999;i++)//
並查集重新調整一次!
getfa(i);
int cnt=0;//
統計家庭數
sets;//
記錄根節點
for(int i=0;i<=9999;i++)
int fa=tree[i];
int k;//
表示開的family陣列的序號
if(s.count(fa)>0
) }
}else
//將a[i]陣列的內容轉移到b[k]中
b[k].area+=a[i].area;
b[k].minn_id=min(b[k].minn_id,fact1id(i) );
b[k].pnum+=fact2(i);
b[k].suit+=a[i].suit;
}for(int i=1;i<=cnt;i++)
sort(b+1,b+1+cnt,cmp);
printf(
"%d\n
",cnt);
for(int i=1;i<=cnt;i++)
return0;
}
L2 007 家庭房產(並查集)
給定每個人的家庭成員和其自己名下的房產,請你統計出每個家庭的人口數 人均房產面積及房產套數。輸入第一行給出乙個正整數n 1000 隨後n行,每行按下列格式給出乙個人的房產 編號 父 母 k 孩子1 孩子k 房產套數 總面積其中編號是每個人獨有的乙個4位數的編號 父和母分別是該編號對應的這個人的父母的...
L2 007 家庭房產
給定每個人的家庭成員和其自己名下的房產,請你統計出每個家庭的人口數 人均房產面積及房產套數。輸入格式 輸入第一行給出乙個正整數n 1000 隨後n行,每行按下列格式給出乙個人的房產 編號 父 母 k 孩子1 孩子k 房產套數 總面積 其中 編號 是每個人獨有的乙個4位數的編號 父 和 母 分別是該編...
L2 007 家庭房產c 版本答案
給定每個人的家庭成員和其自己名下的房產,請你統計出每個家庭的人口數 人均房產面積及房產套數。輸入格式 輸入第一行給出乙個正整數n 1000 隨後n行,每行按下列格式給出乙個人的房產 編號 父 母 k 孩子1 孩子k 房產套數 總面積 其中編號是每個人獨有的乙個4位數的編號 父和母分別是該編號對應的這...