COGS 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

tarjan模板题

屠龙宝刀点击就送

#include <ctype.h>
#include <cstdio>
#define N 10050
void read(int &x)
{
    x=0;bool f=0;
    register char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch==‘-‘) f=1;
    for(;isdigit(ch);ch=getchar()) x=x*10+ch-‘0‘;
    x=f?(~x)+1:x;
}
struct Edge
{
    int next,to;
    Edge (int next=0,int to=0) :next(next),to(to) {}
}edge[N<<1];
bool vis[N],instack[N];
int tim,sumcol,col[N],n,head[N<<1],cnt,dfn[N],low[N],stack[N],top;
int min(int a,int b) {return a>b?b:a;}
void insert(int u,int v)
{
    edge[++cnt]=Edge(head[u],v);
    head[u]=cnt;
}
void tarjan(int x)
{
    dfn[x]=low[x]=++tim;
    instack[x]=true;
    stack[++top]=x;
    for(int i=head[x];i;i=edge[i].next)
    {
        int v=edge[i].to;
        if(!dfn[v])
        {
            tarjan(v);
            low[x]=min(low[x],low[v]);
        }
        else if(instack[v]) low[x]=min(low[x],dfn[v]);
    }
    if(low[x]==dfn[x])
    {
        sumcol++;
        int t;
        do
        {
            t=stack[top--];
            instack[t]=false;
            col[t]=sumcol;
        }while(x!=t);
    }
}
int main()
{
    freopen("jdltt.in","r",stdin);freopen("jdltt.out","w",stdout);
    read(n);int x,y;
    while(scanf("%d%d",&x,&y)!=EOF) insert(x,y);
    for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i);
    printf("%d\n",sumcol);
    for(int i=1;i<=n;i++)
    {
        if(!vis[i])
        {
            for(int j=i;j<=n;j++)
            {
                if(col[j]==col[i])
                {
                    vis[j]=1;
                    printf("%d ",j);
                }
            }
            printf("\n");
        }
    }
    return 0;
}
时间: 2024-12-06 07:21:41

COGS 1298. 通讯问题的相关文章

cogs——1298. 通讯问题

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

tarjan——cogs 1298 通讯问题

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

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在监控.可扩展性.稳定性和性能方面都