题目1526:朋友圈

时间限制:1 秒

内存限制:128 兆

特殊判题:

提交:1675

解决:514

题目描述:

假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。
假如:n = 5 , m = 3 , r = {{1 , 2} , {2 , 3} , {4 , 5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个朋友圈,4、5属于另一个朋友圈,结果为2个朋友圈。

输入:

输入包含多个测试用例,每个测试用例的第一行包含两个正整数 n、m,1=<n,m<=100000。接下来有m行,每行分别输入两个人的编号f,t(1=<f,t<=n),表示f和t是好友。 当n为0时,输入结束,该用例不被处理。

输出:

对应每个测试用例,输出在这n个人里一共有多少个朋友圈。

样例输入:
5 3
1 2
2 3
4 5
3 3
1 2
1 3
2 3
0
样例输出:
2
1
来源:
小米2013年校园招聘笔试题
并查集的运用 
重点是这道题目他要合并呀!!!这样才能节约时间,就是省掉部分上级,使下级直接的前序直接变为掌门

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 100010
int pre[maxn],t[maxn];
int findn(int x)
{
    int r = x;
    while(r!=pre[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=findn(x),fy=findn(y);
    if(fx!=fy)
    {
        pre[fy] = fx;
    }
}
int main()
{
    int n,m;
    while(~scanf("%d",&n))
    {
        if(n==0)
            break;
        scanf("%d",&m);
        for(int i=1;i<=n;i++)
        {
            pre[i] = i;
            t[i] = 0;
        }
        for(int i=0;i<m;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            join(a,b);
        }
        for(int i=1;i<=n;i++)
        {
            t[findn(i)]=1;
        }
        int num=0;
        for(int i=1;i<=n;i++)
        {
            if(t[i])
                num++;
        }
        printf("%d\n",num);
    }
    return 0;
}

时间: 2024-08-19 07:01:46

题目1526:朋友圈的相关文章

教你如何提升微信朋友圈互动频率 如何快速增加好友

每天朋友圈都是各种产品泛滥,坦白讲很烦.陌生的肯定是拉黑,可是有一些都是朋友.同事,你也不好拉黑.可是难忍刷屏的烦恼,总有一天你忍无可忍!不停的刷屏,总有一天你会发现,真正有事要找朋友的时候才发现.你已经被无情的拉黑了.意义何在,伤了感情却没有任何效益. 我想说的是-----朋友圈不是这么玩的. 你可以卖产品,可是你要有方法.你要让对你产品有意向的人主动加你.而不是遍地加人.加了刷屏,重蹈覆辙.再说了,现在微信朋友圈限人数5000!你要这么多僵尸粉,没有丝毫价值 给大家分享几个方法,教你如何吸引

求解朋友关系中的朋友圈数量

问题描述:给出10w条人和人之间的朋友关系,求出这些朋友关系中有多少个朋友圈 样例A-B.B-C.D-E.E-F ,这四对关系中存在2个朋友圈 解题思路:并查集,而题目只需要求出朋友圈数量,并不需要求出各朋友圈,所以该并查集的实现也可以非常简单. A-B,就把father[B] = A,处理每条朋友关系即可得到结果. 而关于并查集的介绍,已有很多博文有所阐述,这里就不啰嗦了. 如下给出实现的并查集 Python实现 class WeightedUF(): fatherid=[] sz=[] co

数据结构与算法问题 朋友圈

奈何能力不够,用欧拉回路DFS解题,但是Memory Limit Exceed了,晚上回来再学用并查集. 题目描述: 假如已知有n个人和m对好友关系(存于数字r).如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈. 假如:n = 5 , m = 3 , r = {{1 , 2} , {2 , 3} , {4 , 5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1.2.3属于一个朋友圈,4.5属于另一个朋

面试题:如何测试微信朋友圈(附图)

如果碰到这种题目,我们可以从以下几个方面来分析: 功能.界面/易用性.中断.网络.兼容性.安全性.性能测试 温馨提示:本文文字内容有点多,如果不喜欢看大篇幅文字的朋友,可自行拖到文末看我整理的测试思维图 功能测试 1.朋友圈发送功能 1)只发送文本 a.考虑文本长度:1-1500字符(该数据为百度数据).超出最大字符长度 b.考虑文本类型:纯中文.纯数字.纯字母.纯字符.纯表情(微信表情/手机自带表情).混合类型.包含url链接:因为过长纯类型需要换行很容易出现超出边框问题,所以这里先考虑过长纯

iOS Core Image-----十行代码实现微信朋友圈模糊效果

昨天下午微信的朋友圈着实火了一把,在这之后好多程序员都通过抓包工具看到了原图,但是我却在想,网上说是在移动前端做到的那是怎么做到的呢,经过一些学习,终于掌握了一些Core Image的知识,做出了相应的效果,仅仅十行代码 UIImageView * imgView = [[UIImageView alloc]init]; imgView.frame = CGRectMake(50, 50, 200, 200); [self.view addSubview:imgView]; UIImage *

基于微信群控系统分析几十万几百万用户微信朋友圈和聊天记录数据

基于微信群控系统分析几十万几百万用户朋友圈和聊天记录数据打造针对用户的智能推荐系统 用户属性: 姓名.性别.年龄.所在地区.常驻地区.手机号码.微信号码.职业.岗位.身份证等等 用户行为:1.通过图文分析,定位所在区域.行业.大概的收入状况.喜好:2.如果是微商,分析常发微信圈产品:3.综合分析朋友圈人气状况:4.给用户打标签:5.产品匹配. 建立用户画像标签和大数据分析实现智能推荐系统 需要用到的技术 朋友圈抓取技术.高并发架构.大数据分析架构 安卓开发 python  mongodb spa

h5+分享到微信、朋友圈代码示例

(function(window) { var Share={}; Share.info = { id: '', name: '', head_image: "_www/images/icon/A/144.png", introduce: '' }; /** * 更新分享服务 */ var shares = null; function getSerivces() { plus.share.getServices(function(s) { shares = {}; for (var

Android 微信分享,分享到朋友圈与分享到好友,以及微信登陆

extends:http://www.cnblogs.com/android100/p/Android-qq.html 一.申请你的AppID http://open.weixin.qq.com/ 友情提示:推荐使用eclipse打包软件最后一步的MD5值去申请AppID 二.官网下载libammsdk.jar包 http://open.weixin.qq.com/download/?lang=zh_CN 三.将libammsdk.jar复制到工程的libs目录 四.在需要分享的Activity

android 滚动栏下拉反弹的效果(相似微信朋友圈)

微信朋友圈上面的图片封面,QQ空间说说上面的图片封面都有下拉反弹的效果,这些都是使用滚动栏实现的.下拉,当松开时候.反弹至原来的位置.下拉时候能看到背景图片.那么这里简介一下这样的效果的实现. 本文源代码下载:点击 1.效果图 这部手机显示的分辨率有限,非常老的手机调试. 2.具有反弹效果BounceScrollView package com.org.scroll; import android.content.Context; import android.graphics.Rect; im