cogs——1298. 通讯问题

1298. 通讯问题

★★   输入文件:jdltt.in   输出文件:jdltt.out   简单对比
时间限制:1 s   内存限制:128 MB

【题目描述】

一个篮球队有n个篮球队员,每个队员都有联系方式(如电话、电子邮件等)。但并不是每个队员的联系方式都公开,每个队员的联系方式只有一部分队员知道。问队员可以分成多少个小组,小组成员之间可以相互通知(包括一个队员一个组,表示自己通知自己)。

【输入格式】

输入文件有若干行

第一行,一个整数n,表示共有n个队员(2<=n<=100)

下面有若干行,每行2个数a、b,a、b是队员编号,表示a知道b的通讯方式。

【输出格式】

输出文件有若干行

第一行,1个整数m,表示可以分m个小组,下面有m行,每行有若干个整数,表示该小组成员编号,输出顺序按编号由小到大。

【样例输入】

12
1 3
2 1
2 4
3 2
3 4
3 5
4 6 
5 4
6 4
7 4
7 8
7 12
8 7
8 9
10 9
11 10

【样例输出】

8

1 2 3

4 6

5

7 8

9

10

11

12

裸题、、、、、(不要忘了排序、、、)  

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 1000
using namespace std;
bool flag,vis[N],vist[N];
int n,x,y,tot,ans,top,tim,sum;
int low[N],dfn[N],head[N],stack[N],belong[N];
struct Edge
{
    int from,to,next;
}edge[N];
int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1; ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘; ch=getchar();}
    return x*f;
}
int add(int x,int y)
{
    tot++;
    edge[tot].to=y;
    edge[tot].next=head[x];
    head[x]=tot;
}
int tarjan(int now)
{
    dfn[now]=low[now]=++tim;
    stack[++top]=now;vis[now]=true;
    for(int i=head[now];i;i=edge[i].next)
    {
        int t=edge[i].to;
        if(vis[t]) low[now]=min(low[now],dfn[t]);
        else if(!dfn[t]) tarjan(t),low[now]=min(low[now],low[t]);
    }
    if(low[now]==dfn[now])
    {
        sum++;belong[now]=sum;
        for(;stack[top]!=now;top--)
        {
            int x=stack[top];
            belong[x]=sum;vis[x]=false;
        }
        vis[now]=false;top--;
    }
}
int main()
{
    freopen("jdltt.in","r",stdin);
    freopen("jdltt.out","w",stdout);
    n=read();
    while(scanf("%d%d",&x,&y)==2)
       add(x,y);
    for(int i=1;i<=n;i++)
     if(!dfn[i]) tarjan(i);
    printf("%d\n",sum);
    for(int i=1;i<=n;i++)
    {
        flag=false;
        if(!vist[i])
         for(int j=1;j<=n;j++)
          if(belong[j]==belong[i]) vist[j]=true,printf("%d ",j),flag=true;
        if(flag) printf("\n");
    }
    return 0;
}
时间: 2024-10-14 05:35:55

cogs——1298. 通讯问题的相关文章

tarjan——cogs 1298 通讯问题

1298. 通讯问题 ★   输入文件:jdltt.in   输出文件:jdltt.out   简单对比 时间限制:1 s   内存限制:128 MB [题目描述] 一个篮球队有n个篮球队员,每个队员都有联系方式(如电话.电子邮件等).但并不是每个队员的联系方式都公开,每个队员的联系方式只有一部分队员知道.问队员可以分成多少个小组,小组成员之间可以相互通知(包括一个队员一个组,表示自己通知自己). [输入格式] 输入文件有若干行 第一行,一个整数n,表示共有n个队员(2<=n<=100) 下面

COGS 1298. 通讯问题

★★   输入文件:jdltt.in   输出文件:jdltt.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 一个篮球队有n个篮球队员,每个队员都有联系方式(如电话.电子邮件等).但并不是每个队员的联系方式都公开,每个队员的联系方式只有一部分队员知道.问队员可以分成多少个小组,小组成员之间可以相互通知(包括一个队员一个组,表示自己通知自己). [输入格式] 输入文件有若干行 第一行,一个整数n,表示共有n个队员(2<=n<=100) 下面有若干行,每行2个数a

1298. 通讯问题

1298. 通讯问题 ★   输入文件:jdltt.in   输出文件:jdltt.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 一个篮球队有n个篮球队员,每个队员都有联系方式(如电话.电子邮件等).但并不是每个队员的联系方式都公开,每个队员的联系方式只有一部分队员知道.问队员可以分成多少个小组,小组成员之间可以相互通知(包括一个队员一个组,表示自己通知自己). [输入格式] 输入文件有若干行 第一行,一个整数n,表示共有n个队员(2<=n<=100) 下面有

tarjan算法--cojs 1298. 通讯问题

cojs 1298. 通讯问题 ★   输入文件:jdltt.in   输出文件:jdltt.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 一个篮球队有n个篮球队员,每个队员都有联系方式(如电话.电子邮件等).但并不是每个队员的联系方式都公开,每个队员的联系方式只有一部分队员知道.问队员可以分成多少个小组,小组成员之间可以相互通知(包括一个队员一个组,表示自己通知自己). [输入格式] 输入文件有若干行 第一行,一个整数n,表示共有n个队员(2<=n<=100

COGS——T 8. 备用交换机

http://www.cogs.pro/cogs/problem/problem.php?pid=8 ★★   输入文件:gd.in   输出文件:gd.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] n个城市之间有通讯网络,每个城市都有通讯交换机,直接或间接与其它城市连接.因电子设备容易损坏,需给通讯点配备备用交换机.但备用交换机数量有限,不能全部配备,只能给部分重要城市配置.于是规定:如果某个城市由于交换机损坏,不仅本城市通讯中断,还造成其它城市通讯中断,则配

COGS 08-备用交换机 题解——S.B.S.

8. 备用交换机 ★★   输入文件:gd.in   输出文件:gd.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] n个城市之间有通讯网络,每个城市都有通讯交换机,直接或间接与其它城市连接.因电子设备容易损坏,需给通讯点配备备用交换机.但备用交换机数量有限,不能全部配备,只能给部分重要城市配置.于是规定:如果某个城市由于交换机损坏,不仅本城市通讯中断,还造成其它城市通讯中断,则配备备用交换机.请你根据城市线路情况,计算需配备备用交换机的城市个数,及需配备备用交换

Android网络通讯简介

网络通信应该包含三部分的内容:发送方.接收方.协议栈.发送方和接收方是参与通信的主体,协议栈是发送方和接收方进行通信的契约.按照服务类型,网络通信可分为面向连接和无连接的方式.面向连接是在通信前建立通信链路,而通信结束后释放该链路.无连接的方式则不需要在通信前建立通信连接,这种方式不保证传输的质量. Android提供了多种网络通信的方式,如Java中提供的网络编程,在Android中都提供了支持.Android中常用的网络编程方式如下: 针对TCP/IP协议的Socket和ServerSock

用ESP8266 WIFI模块连接服务器,并实现与服务器相互通讯

最近在做一个智能锁的项目,该项目要求实现在任何地方(当然是要有网络的)可以在手机上用APP开锁.而我负责的部分主要是实现底层与服务器连接,并且要能相互通讯.考虑了很多问题,最终选择了用ESP8266 WIFI模块实现了这个功能.下面向大家就简单分享一下. 工具:网络调试助手  ESP8266  STM32F1开发板 首先,用网络调试助手来虚拟一个服务器,如下: 有了服务器后,接下来我们就要用WIFI来连接这个服务器.ESP8266 有三种工作模式,由于项目要求,我选用了STA中的客户端模式.下面

java SSM框架 多数据源 代码生成器 websocket即时通讯 shiro redis 后台框架源码

获取[下载地址]   QQ: 313596790官网 http://www.fhadmin.org/A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都