认老乡
来源:互联网 发布:商贸公司记账软件 编辑:程序博客网 时间:2024/04/28 07:41
认老乡
大学的同学来自全国各地,对于远离家乡步入陌生大学校园的大一新生来说,碰到老乡是多么激动的一件事,于是大家都热衷于问身边的同学是否与自己同乡,来自新疆的小赛尤其热衷。但是大家都不告诉小赛他们来自哪里,只是说与谁同乡,从所给的信息中,你能告诉小赛有多少人确定是她的同乡吗?
输入
每个测试实例首先包括2个整数,N(1 <= N <= 1000),M(0 <= M <= N*(N-1)/2),代表现有N个人(用1~N编号)和M组关系;
在接下来的M行里,每行包括2个整数,a,b,代表a跟b是同乡;
当N = 0,M = 0输入结束;
已知1表示小赛本人。
考虑并查集的应用
#include <stdio.h>#define maxn 1001int num[maxn];int father[maxn];int n , m;void init(int n){ for(int i = 1; i <= n; i++) father[i] = i;} //找到自己的父节点int find(int x){ while(x!=father[x]) x = father[x]; return x;}//合并两个节点void unit(int a, int b){ int father_a = find(a); int father_b = find(b); if(father_a!=father_b){ for(int i = 1; i <= n; i++){ if(find(i) == father_a){ father[i] = father_b; } } }}int main(){ while(~scanf("%d %d", &n, &m)){ if(n==0 && m==0) break; init(n); int a , b; while(m--){ scanf("%d %d",&a, &b); unit(a, b); } int ans = 0; int f = find(1); //printf("The father o 1 is : %d\n", f); for(int i = 2; i <= n ; i++){ if(find(i) == f) ans++; } printf("%d\n",ans); } return 0;}
0 0
- 认老乡
- 认老乡
- 360认老乡题目
- 【赛码】认老乡
- 赛码:认老乡
- 认老乡-编程题有感
- 认老乡 2016年360笔试题目 并查集
- 老乡
- 找老乡
- 找老乡
- 找老乡
- 老乡畅谈
- 找老乡
- 找老乡
- 一封回老乡的信
- 360笔试--找老乡
- 找老乡 (sdut oj)
- sdut 找老乡
- 动态库与静态库
- Java中map的使用
- Java Socket 基础编程
- Java Audio Video Encoder
- Codeforces 500B:New Year Permutation(并查集||Floyd+思维)
- 认老乡
- Linux中的特殊权限粘滞位(sticky bit)详解
- Git Bash for GitHub
- MySQL:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
- windows10下的mysql5.7解压版安装配置
- 2016.09.28 varargs.c
- Jquery 实现下拉框 关键的DIV控制事件
- 258. Add Digits
- ATL的GUI程序设计(2)