L2-007 家庭房产 (25 分)

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1e3 + 10, M = 1e4 + 10;struct Person {int id;int num, area;
}person[N];
struct Family {int id;int cnt, num, area;double res1, res2;
}family[M];int p[M];
bool st[M];int find(int x) {if (p[x] != x) p[x] = find(p[x]);return p[x];
}
void merge(int a, int b) {int aa = find(a), bb = find(b);if (aa < bb) {p[bb] = aa;} else {p[aa] = bb;}
}
bool cmp(Family a, Family b) {if (a.res2 != b.res2) return a.res2 > b.res2;return a.id < b.id;
}int main() {for (int i = 0; i < M; ++ i) {p[i] = i;}int n;cin >> n;for (int i = 1; i <= n; ++ i) {int id, id1, id2;cin >> id >> id1 >> id2;person[i].id = id;st[id] = true;if (id1 != -1) {st[id1] = true;merge(id1, id);}if (id2 != -1) {st[id2] = true;merge(id2, id);}int k;cin >> k;while (k -- ) {int id3;cin >> id3;st[id3] = true;merge(id, id3);}int num, area;cin >> num >> area;person[i].num = num;person[i].area = area;}for (int i = 1; i <= n; ++ i) {int fa = find(person[i].id);family[fa].id = fa;family[fa].num += person[i].num;family[fa].area += person[i].area;}for (int i = 0; i < M; ++ i) {if (st[i]) {int fa = find(i);family[fa].cnt ++ ;}}int res = 0;for (int i = 0; i < M; ++ i) {if (family[i].cnt) {res ++ ;family[i].res1 = family[i].num * 1.0 / family[i].cnt;family[i].res2 = family[i].area * 1.0 / family[i].cnt;}}cout << res << endl;sort(family, family + M, cmp);for (int i = 0; i < res; ++ i) {printf("%04d %d %.3lf %.3lf", family[i].id, family[i].cnt, family[i].res1, family[i].res2);if (i != res - 1) cout << endl;}
}

L2-013 红色警报 (25 分)

#include <iostream>
using namespace std;
const int N = 5e4 + 10;int n, m;
int p[N];
bool st[N];
int a[N], b[N];int find(int x) {if (p[x] != x) p[x] = find(p[x]);return p[x];
}
void merge(int u, int v) {int uu = find(u), vv = find(v);p[uu] = vv;
}
int count() {int cnt = 0;for (int i = 0; i < n; ++ i) {if (p[i] == i) {cnt ++ ;}}return cnt;
}int main() {cin >> n >> m;for (int i = 0; i < n; ++ i) {p[i] = i;}for (int i = 0; i < m; ++ i) {cin >> a[i] >> b[i];merge(a[i], b[i]);}int cnt0 = count();int k;cin >> k;for (int i = 1; i <= k; ++ i) {int x;cin >> x;st[x] = true;for (int j = 0; j < n; ++ j) {p[j] = j;}for (int j = 0; j < m; ++ j) {if (!st[a[j]] && !st[b[j]]) {merge(a[j], b[j]);}}int cnt1 = count();if (cnt1 == cnt0 || cnt1 == cnt0 + 1) {printf("City %d is lost.\n", x);} else {printf("Red Alert: City %d is lost!\n", x);}cnt0 = cnt1;}if (k == n) {cout << "Game Over.";}
}

L3-003 社交集群 (30 分)

#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1010;int p[N];
vector<int> ve[N];int find(int x) {if (p[x] != x) p[x] = find(p[x]);return p[x];
}
void merge(int u, int v) {u = find(u), v = find(v);p[u] = v;
}
bool cmp(pair<int, int> a, pair<int, int> b) {return a.second > b.second;
}int main() {int n;cin >> n;for (int i = 1; i < N; ++ i)p[i] = i;for (int i = 1; i <= n; ++ i) {int k;cin >> k;char ch;cin >> ch;int a, b;cin >> a;ve[i].push_back(a);k -- ;while (k -- ) {cin >> b;merge(b, a);ve[i].push_back(b);}}unordered_map<int, int> ma;for (int i = 1; i <= n; ++ i) {ma[find(ve[i][0])] ++ ;}vector<pair<int, int>> res(ma.begin(), ma.end());sort(res.begin(), res.end(), cmp);cout << res.size() << endl;for (int i = 0; i < res.size(); ++ i) {cout << res[i].second;if (i != res.size() - 1) cout << ' ';}
}

团体程序设计天梯赛-练习集(并查集)相关推荐

  1. L2-010. 排座位-PAT团体程序设计天梯赛GPLT(并查集)

    布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席. 输入格式: ...

  2. L3-003. 社交集群-PAT团体程序设计天梯赛GPLT(并查集)

    在社交网络平台注册时,用户通常会输入自己的兴趣爱好,以便找到和自己兴趣相投的朋友.有部分兴趣相同的人们就形成了"社交集群".现请你编写程序,找出所有的集群. 输入格式: 输入的第一 ...

  3. ptaa乘以b_PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)...

    C++ CPP C++语言开发 PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中--) PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:     ...

  4. PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

    PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...

  5. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L3 答案(01-23)

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L3 答案 顶着满课,整整一星期,终于咕完了.(:´д`)ゞ 知识点分类(23): 1.搜索模拟(5):BFS,DFS,最短路,路径打印 2.计算几 ...

  6. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L2 答案 鉴定完毕,全部水题 ヾ(•ω•`)o 知识点分类(32): 1.树锯结构(9):二叉树的存储,编号,遍历顺序转换,求深度,底层节点,从底 ...

  7. PTA|团体程序设计天梯赛-练习题库集

    文章目录 关于爬取脚本的编写 L1-001 Hello World! (5 分) L1-002 打印沙漏 (15 分) L1-003 个位数统计 (15 分) L1-004 计算摄氏温度 (5 分) ...

  8. PTA团体程序设计天梯赛-练习集(3)

    PTA团体程序设计天梯赛-练习集 L1-001 Hello World (5 分) 这道超级简单的题目没有任何输入. 你只需要在一行中输出著名短句"Hello World!"就可以 ...

  9. PTA团体程序设计天梯赛-练习集

    PTA团体程序设计天梯赛-练习集 L1-024 后天 L1-025 正整数A+B L1-026 I Love GPLT L1-027 出租 L1-029 是不是太胖了 L1-030 一帮一 L1-03 ...

  10. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L1 答案

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L1 答案 鉴定完毕,全部水题 ヾ(•ω•`)o 标号 标题 分数 通过数 提交数 通过率 L1-001 Hello World 5 46779 1 ...

最新文章

  1. Linux下安装Tomcat
  2. python装饰器作用-python装饰器有什么用
  3. 在搜索框自动输入文本_Selenium 时间搜索框查询和日期大小比较
  4. python 去掉tab_Python使用crontab模块设置和清除定时任务操作详解
  5. 生成SQL SERVER数据库脚本
  6. IntelliJ 中类似于Eclipse ctrl+o的是ctrl+F12
  7. Qt For Android | QT安卓开发环境搭建
  8. 【解决】解决每次打开Office 2013都提示配置进度的解决方法
  9. USB接口定义详解(图)
  10. 基于android的超级记事本,超级记事本基于设计论文
  11. R语言ggplot2可视化条形图:通过双色渐变配色颜色主题可视化条形图
  12. 苹果笔记本风扇测试软件,实用的mac电脑风扇控制软件 Macs Fan Control Pro
  13. python实现指纹识别毕业论文_指纹识别系统设计毕业论文+开题报告+翻译及原文+设计源码...
  14. MATLAB(3)MATLA 求极限 求积分 求微分 求级数的和
  15. 从正则表达式到NFA:Thompson构造法
  16. HTML让背景图片铺满整个图片
  17. 微信小程序Radio为一组时,使用三元表达式始终选中默认值
  18. Cisco Packet Tracer学习
  19. 科普计算机知识的视频,知识短视频 科普更走心
  20. CUDA与OpenCL架构

热门文章

  1. tr 去除空行_tr的用法
  2. MySQL常用存储引擎——Archive
  3. 将微信公众号变为自动聊天机器人(一)引言
  4. html标题怎么快速更改,我如何更改标题和HTML上的slideToggle
  5. Ubuntu系统Ping通windows系统
  6. 耦合式是什么意思_耦合是什么意思通俗点(耦合摆原理)
  7. Getting Started (入门)
  8. 万能显卡驱动win7_使命召唤:战区442.59驱动介绍
  9. 计算机考试的选做题,最新主观题机考注意事项!不了解这些你会后悔的!
  10. 现存最古老青海撒拉族手抄本《古兰经》首次公开展览