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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

PAT 1114 Family Property 并查集

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAT 1114 Family Property 并查集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

This time, you are supposed to help us collect the data for family-owned property. Given each person’s family members, and the estate(房產)info under his/her own name, we need to know the size of each family, and the average area and number of sets of their real estate.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (<=1000). Then N lines follow, each gives the infomation of a person who owns estate in the format:

ID Father Mother k Child1 … Childk M_estate Area

where ID is a unique 4-digit identification number for each person; Father and Mother are the ID’s of this person’s parents (if a parent has passed away, -1 will be given instead); k (0<=k<=5) is the number of children of this person; Childi’s are the ID’s of his/her children; M_estate is the total number of sets of the real estate under his/her name; and Area is the total area of his/her estate.

Output Specification:

For each case, first print in a line the number of families (all the people that are related directly or indirectly are considered in the same family). Then output the family info in the format:

ID M AVG_sets AVG_area

where ID is the smallest ID in the family; M is the total number of family members; AVG_sets is the average number of sets of their real estate; and AVG_area is the average area. The average numbers must be accurate up to 3 decimal places. The families must be given in descending order of their average areas, and in ascending order of the ID’s if there is a tie.

Sample Input:
10
6666 5551 5552 1 7777 1 100
1234 5678 9012 1 0002 2 300
8888 -1 -1 0 1 1000
2468 0001 0004 1 2222 1 500
7777 6666 -1 0 2 300
3721 -1 -1 1 2333 2 150
9012 -1 -1 3 1236 1235 1234 1 100
1235 5678 9012 0 1 50
2222 1236 2468 2 6661 6662 1 300
2333 -1 3721 3 6661 6662 6663 1 100
Sample Output:
3
8888 1 1.000 1000.000
0001 15 0.600 100.000
5551 4 0.750 100.000

題意就是按照題目要求把一個人的信息給我們 讓我們根據給出的信息網絡
找出一個家庭中符合條件的信息輸出 這個家庭的最小編號 家庭人數 每個人的人均數量和人均房產面積

并查集和搜索 都可以做 這里我用了并查集
每個結構體里多記錄點信息 然后合并的時候好合并 因為這些信息都是可以加減替代更新到根節點上的 這里我們可以把輸入的所有有關聯的id全部連接起來
然后連接的時候如果不是在一個聯通塊中就要把不同聯通塊更新到一個聯通塊中
最后輸出的時候 就是把每個家庭的根節點排序輸出出來即可

#include<bits/stdc++.h> using namespace std; struct node{int f,s_area,s_set,min_id,pep; }n[10003]; void unin(int a,int b){n[b].f = a;n[a].min_id = min(n[a].min_id,n[b].min_id);n[a].pep +=n[b].pep;n[a].s_area+=n[b].s_area;n[a].s_set+=n[b].s_set; } bool cmp(node a,node b){return ((double)a.s_area/a.pep)>((double)b.s_area/b.pep)||(((double)a.s_area/a.pep)==((double)b.s_area/b.pep)&&a.min_id<b.min_id); }// int find(int x){int k,p,j=x;while(n[x].f!=x)x = n[x].f;k = x;while(n[j].f!=j){p = n[j].f;n[j].f = k;j = p; }return k; } int main() {int N;scanf("%d",&N);for(int i=0;i<=9999;i++){n[i].f=i;n[i].min_id = i;n[i].pep = 1;}set<int>pep;while(N--){int id,fa,ma,k;scanf("%d%d%d%d",&id,&fa,&ma,&k);pep.insert(id);int fid = find(id);if(fa!=-1){int ffa = find(fa);if(ffa!=fid)unin(fid,ffa); // pep.insert(fa);}if(ma!=-1){int fma = find(ma);if(fma!=fid)unin(fid,fma); //pep.insert(ma);}while(k--){int child;scanf("%d",&child);int fchild = find(child);//if(fchild!=fid)unin(fid,fchild);//pep.insert(child);}int m_es,area;scanf("%d%d",&m_es,&area);n[fid].s_area+=area;n[fid].s_set+=m_es;} set<int>s;// 去重復根節點 vector<node>ans; for(set<int>::iterator i = pep.begin();i!=pep.end();i++){int c = find(*i);if(s.find(c)==s.end()){s.insert(c);ans.push_back(n[c]);}}sort(ans.begin(),ans.end(),cmp);printf("%d\n",ans.size());for(int i = 0;i<ans.size();i++){printf("%04d %d %.3f %.3f\n",ans[i].min_id,ans[i].pep,(double)ans[i].s_set/ans[i].pep,(double)ans[i].s_area/ans[i].pep);}//return 0; }

總結

以上是生活随笔為你收集整理的PAT 1114 Family Property 并查集的全部內容,希望文章能夠幫你解決所遇到的問題。

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