pta 5-25
来源:互联网 发布:赖昌星 红楼 知乎 编辑:程序博客网 时间:2024/04/30 14:27
pta 原题https://pta.patest.cn/pta/test/15/exam/4/question/840
并查集,看了比较好懂点击打开链接
有一点我没有注意到的是,在这个题目当中,按题输入的时候才会寻找某些结点的根节点并更新,所以pre数组中每个结点对应的可能并不一定其根节点也可能是父亲结点,也就是说路径压缩这个过程其实是滞后的,那么在计算人数的时候,就不能按照pre数组,而是要寻找其根节点。
源代码
#include<stdio.h>int pre[30005]={0},cnt[30005]={0};void creat(int n); //初始化每个结点的前导节点 int find(int x); //找到某个结点的根节点 void join(int x,int y); //判断两个结点是否联通,否则合并 int main(){int n,m,i,j,a,b,c,t,max = -1;scanf("%d%d",&n,&m);creat(n);for(i=0;i<m;i++){scanf("%d%d",&a,&b);for(j=1;j<a;j++){scanf("%d",&c);join(b,c); }}for(i=1;i<=n;i++){t = find(i); //计算人数 cnt[t]++;}for(i=1;i<=n;i++){if(pre[i]==i&&max<cnt[i])max = cnt[i];}printf("%d\n",max);return 0;}void creat(int n){int i;for(i=1;i<=n;i++)pre[i] = i;} int find(int x){int r = x;while(pre[r]!=r){r = pre[r];}int i = x,j; while(pre[i]!=r){j = pre[i];pre[i] = r;i = j;}return r; }void join(int x,int y){int fx = find(x),fy = find(y);if(fx!=fy){pre[fy] = fx; }}
0 0
- PTA 5-25 朋友圈
- pta 5-25
- PTA 5-25 念数字
- 浙江大学 PTA 5-25 朋友圈 (25分)
- PTA 5-1 List Components (25分)
- 【PTA】5-10 列车调度 (25分)
- PTA-- 快速排序(25)
- PTA
- PTA
- pta
- pta
- PTA习题 5-5 堆中的路径 (25分)
- 浙大 PTA 5-39 魔法优惠券 (25分)
- PTA-数据结构 5-18 银行业务队列简单模拟 (25分)
- PTA-数据结构 5-31 笛卡尔树 (25分)
- PTA-数据结构 5-24 树种统计 (25分)
- PTA-数据结构 5-34 任务调度的合理性 (25分)
- PTA-数据结构 5-26 Windows消息队列 (25分)
- iOS开发使用自定义字体
- DrawerLayout基本使用
- Markdown语法-简体中文
- Android四大组件之一:Activity
- zookeeper遇见错误总结
- pta 5-25
- android 5.1 C语言 杀应用的PID
- Linux下如何进入MySQL(针对自己的公司)
- FDMB的认识
- Windows服务程序开发介绍
- Android WebView开发问题及优化汇总
- DBContext Remove 不SaveChanges,之后的状态判断
- Activity详解(生命周期、以各种方式启动Activity、状态保存,完全退出等)
- GCD常用用法