热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CirclesofFriends

Acircleoffriendsisanetworkoffriendrelationships.IfAisafriendofB,thenBisconsideredafriendof

A circle of friends is a network of friend relationships. If A is a friend of B, then B is considered a friend of A no matter B admits or not, and they are said to belong to the same circle. Here we assume that friendship is transitive, that is, if A is a friend of B, and B is a friend of C, then A is a friend of C and the three of them all belong to the same circle.

On the other hand, A is not so close to C as B is. We define the distance D(X, Y) between two friends X and Y as the minimum number of friends between them. For example, D(A, B) = 0, and D(C, A) = 1. The diameter of a friends circle is the maximum distance between any pair of friends in the circle.

Now given some people‘s relationships, you are supposed to find the number of friends circles and the circle with the largest diameter.


Input Specification:

Each input file contains one test case. For each case, the first line gives an integer N (2), which is the total number of people involved, and hence they are numbered from 1 to N. Then N lines follow, each in the format:

p?1?? ... p?k??

where k (0) is the number of friends and p?1?? to p?k?? (if k>0) are the friends‘ indices. The i-th line corresponds to the i-th person. All the numbers in a line are separated by spaces. It is guaranteed that no one is given as a friend of oneself.


Output Specification:

For each case, print in a line the number of friends circles, and the largest diameter, separated by exactly one space.


Sample Input:

17
2 15 12
1 17
2 16 9
1 8
4 10 13 15 14
0
2 11 14
1 4
2 2 3
2 13 11
2 15 7
2 1 14
2 5 15
0
0
1 3
1 2

 

Sample Output:

4 3

1 #include
2 using namespace std;
3 vector<set<int> > v;
4 vector<bool> vb;
5 vector<int> vr;
6 set<int>::iterator its;
7 int spart,smax;
8 void bfs(int n,bool flag)
9 {
10 vector<bool> vbb(vb.size(),true);
11 int md=0;
12 pair<int,int> p;
13 queueint,int> > q;
14 q.push(pair<int,int>(n,-1));
15 if(flag)
16 vb[n]=false;
17 else
18 vbb[n]=false;
19 for(;!q.empty();q.pop())
20 {
21 p=q.front();
22 if(p.second>md)
23 {
24 md=p.second;
25 if(flag)
26 {
27 vr.clear();
28 vr.push_back(p.first);
29 }
30 }
31 else if(p.secOnd==md)
32 if(flag)
33 vr.push_back(p.first);
34 for(its=v[p.first].begin();its!=v[p.first].end();++its)
35 {
36 if(flag)
37 {
38 if(vb[*its])
39 {
40 vb[*its]=false;
41 q.push(pair<int,int>(*its,p.second+1));
42 }
43 }
44 else
45 {
46 if(vbb[*its])
47 {
48 vbb[*its]=false;
49 q.push(pair<int,int>(*its,p.second+1));
50 }
51 }
52 }
53 }
54 if(md>smax)
55 smax=md;
56 return;
57 }
58 int main()
59 {
60 // ios::sync_with_stdio(false);
61 // freopen("data.txt","r",stdin);
62 int n,k,x;
63 spart=0,smax=0;
64 scanf("%d",&n);
65 v.resize(n);
66 vb.resize(n,true);
67 for(int i=0;i)
68 {
69 scanf("%d",&k);
70 for(;k--;)
71 {
72 scanf("%d",&x);
73 x--;
74 v[i].insert(x);
75 v[x].insert(i);
76 }
77 }
78 for(int t=0;t)
79 {
80 if(vb[t])
81 {
82 bfs(t,true);
83 for(int i=0;i)
84 bfs(vr[i],false);
85 spart++;
86 t=0;
87 }
88 }
89 printf("%d %d",spart,smax);
90
91 return 0;
92 }

 


推荐阅读
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 使用REM和媒体查询实现响应式布局
    本文介绍如何利用REM单位和媒体查询(Media Queries)来创建适应不同屏幕尺寸的网页布局。通过具体示例,展示在不同屏幕宽度下如何调整页面元素的样式。 ... [详细]
  • SPFA算法详解与应用
    当图中包含负权边时,传统的最短路径算法如Dijkstra不再适用,而Bellman-Ford算法虽然能解决问题,但其时间复杂度过高。SPFA算法作为一种改进的Bellman-Ford算法,能够在多数情况下提供更高效的解决方案。本文将详细介绍SPFA算法的原理、实现步骤及其应用场景。 ... [详细]
  • 本文详细对比了HashMap和HashTable在多线程环境下的安全性、对null值的支持、性能表现以及方法同步等方面的特点,帮助开发者根据具体需求选择合适的数据结构。 ... [详细]
  • 神策数据分析基础
    本文介绍了基于用户行为的数据分析方法,包括业务问题的提出与定义、具体行为的识别及统计分析流程。同时,详细阐述了如何利用事件模型(Event Model)来描述用户行为,以及在实际应用中的案例分析。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • LeetCode 102 - 二叉树层次遍历详解
    本文详细解析了LeetCode第102题——二叉树的层次遍历问题,提供了C++语言的实现代码,并对算法的核心思想和具体步骤进行了深入讲解。 ... [详细]
  • JavaScript 中引号的多层嵌套使用技巧
    本文详细介绍了在 JavaScript 编程中如何处理引号的多级嵌套问题,包括双引号、单引号以及转义字符的正确使用方法。 ... [详细]
  • 解决UIScrollView自动偏移问题的方法
    本文介绍了一种有效的方法来解决在使用UIScrollView时出现的自动向下偏移的问题,通过调整特定的属性设置,可以确保滚动视图正常显示。 ... [详细]
  • 如何高效渲染JSON数据
    本文介绍了在控制器中返回JSON结果的方法,并详细说明了如何利用jQuery处理和展示这些数据,为Web开发提供了实用的技巧。 ... [详细]
  • Awk是一款功能强大的文本分析与处理工具,尤其在数据解析和报告生成方面表现突出。它通过读取由换行符分隔的记录,并按照指定的字段分隔符来划分和处理这些记录,从而实现复杂的数据操作。 ... [详细]
  • 本文探讨了一种常见的C++面试题目——实现自己的String类。通过此过程,不仅能够检验开发者对C++基础知识的掌握程度,还能加深对其高级特性的理解。文章详细介绍了如何实现基本的功能,如构造函数、析构函数、拷贝构造函数及赋值运算符重载等。 ... [详细]
  • 3DSMAX制作超现实的体育馆模型
    这篇教程是向脚本之家的朋友介绍3DSMAX制作超现实的体育馆模型方法,教程制作出来的体育馆模型非常地不错,不过教程有点难度,需要有一定基础的朋友学习,推荐到脚本之家,喜欢的朋友可 ... [详细]
author-avatar
mobiledu2502894591
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有