热门标签 | 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 }

 


推荐阅读
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文介绍如何通过SQL查询从JDE(JD Edwards)系统中提取所有字典数据,涵盖关键表的关联和字段选择。具体包括F0004和F0005系列表的数据提取方法。 ... [详细]
  • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
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社区 版权所有