6个朋友(codevs 2832)

2832 6个朋友

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 黄金 Gold

题解

题目描述 Description

有这么一种说法:认识6个人,你就认识全世界的人。

Aiden现在有一张关系图,上面记载了N个人之间相互认识的情况。Aiden想知道,他能否只认识6个人就能间接认识这N个人呢?

输入描述 Input Description

第一行,两个数N,M,表示有N个人,M对认识关系。

接下来的M行,每行两个数ai,bi,表示ai与bi相互认识。

不保证认识关系不出现重复,保证ai≠bi。

N个人的编号为1...N。

输出描述 Output Description

若只认识6个人就能间接认识这N个人,则输出“^_^”。

若不行,则第一行输出“T_T”,第二行输出认识6个人最多能间接认识的人的个数。

输出不包括引号。

样例输入 Sample Input

6 7

1 2

1 3

2 4

3 5

4 6

5 6

3 2

样例输出 Sample Output

^_^

数据范围及提示 Data Size & Hint

对于30%的数据,保证0<n≤1000。

对于50%的数据,保证0<n≤5000。

对于100%的数据,保证0<n≤10000,m≤10*n。

//并查集
#include<cstdio>
#include<iostream>
#include<algorithm>
#define M 10010
using namespace std;
int fa[M],num[M];
int find(int x)
{
    if(fa[x]==x)return x;
    return fa[x]=find(fa[x]);
}
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
      fa[i]=i;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        int a=find(x);
        int b=find(y);
        if(a!=b)fa[a]=b;
    }
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        if(find(i)==i)ans++;
        num[find(i)]++;
    }
    if(ans<=6)printf("^_^");
    else
    {
        printf("T_T\n");
        sort(num+1,num+n+1);
        int p=0,tot=0;
        for(int i=1;i<=n;i++)
        {
            if(ans-p<=6)break;
            if(num[i])
            {
                p++;
                tot+=num[i];
            }
        }
        printf("%d",n-tot);
    }
    return 0;
}

时间: 2024-11-08 20:40:55

6个朋友(codevs 2832)的相关文章

2832 6个朋友

2832 6个朋友 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 有这么一种说法:认识6个人,你就认识全世界的人. Aiden现在有一张关系图,上面记载了N个人之间相互认识的情况.Aiden想知道,他能否只认识6个人就能间接认识这N个人呢? 输入描述 Input Description 第一行,两个数N,M,表示有N个人,M对认识关系. 接下来的M行,每行两个数ai,bi,表示ai与bi相互认识. 不保证认

6个朋友

http://codevs.cn/problem/2832/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有这么一种说法:认识6个人,你就认识全世界的人. Aiden现在有一张关系图,上面记载了N个人之间相互认识的情况.Aiden想知道,他能否只认识6个人就能间接认识这N个人呢? 输入描述 Input Description 第一行,两个数N,M,表示有N个人,M对认识关系. 接下来的M行,每行两个数ai,bi,表示ai与b

codevs 1506 传话 题解

Codevs 1506传话 题解 1506 传话--这个题目的解法很多,你能想到几种? 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 一个朋友网络,如果a认识b,那么如果a第一次收到某个消息,那么会把这个消息传给b,以及所有a认识的人. 如果a认识b,b不一定认识a. 所有人从1到n编号,给出所有"认识"关系,问如果i发布一条新消息,那么会不会经过若干次传话后,这个消息传回给了i,1<=i<=n

codevs——T1169 传纸条

http://codevs.cn/problem/1169/  时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以通过传纸条来进行交流.纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小

codevs 2597 团伙

2597 团伙 题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友. 两个强盗是同一团伙的条件是当且仅当他们是朋友.现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙. 输入描述 Input Description 输入文件gangs.in的第一行是一个整数N(2<=N<=1000),表示强盗的个数(从1编号到N). 第二行M(1<=M

CODEVS——T 1005 生日礼物

http://codevs.cn/problem/1005/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 9月12日是小松的朋友小寒的生日.小松知道小寒特别喜欢蝴蝶,所以决定折蝴蝶作为给小寒的生日礼物.他来到了PK大学最大的一家地下超市,在超市里,小松找到了n种可以用来折纸的本子.每种类型的本子里有若干不同颜色的纸若干张,当然同种类型的本子一定是完全一样的,而不同种类型的本子不一定完全不一样.他统计了一下,这里总共有n

Codevs 3409 搬运礼物

3409 搬运礼物 CodeVS原创 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 小浣熊松松特别喜欢交朋友,今年松松生日,就有N个朋友给他送礼物.可是要把这些礼物搬回家是一件很困难的事,具体来说,如果松松一次搬运x件礼物,就要花费w[x]的体力(显而易见,有w[x]<=w[x+1],搬得越多耗费体力越多).松松并不在意他会搬多少次,但是他想知道,自己最少花费多少体力,就可以把礼物全部搬回家. 输入描述 Input D

程序员们,你们再这样下去会没朋友的。

引言 写这篇文章,其实源于之前有个群里的同学,问了LZ一个问题. 当时他给LZ发了一张图片,然后问LZ,"这个@Test注解引用不了是咋回事?" 看到这个问题,LZ当时恰好没事,就顺手给他回复了一下,说这个错误引起的原因是,注解的特性只在JDK1.5或者更高的版本才能用. 话虽这么说,但其实LZ当时心里多少是有些无语的. 提示写的这么清楚了,看不懂吗?就算英文阅读水平差点,百度翻译一下会不会呢? 最让LZ郁闷的是,当LZ回答完以后,这个新人同学只回了一个字,"哦!"

L1-020. 帅到没朋友

/**************************************************************** 1.00001输出一定要是00001,不能是1 2.注意容器中数据的更新,要放大的,不能被小的更新 3.输出的那行最后一定不能有空格! *******************************************************************/ #define _CRT_SECURE_NO_WARNINGS #include<iostre