1506 传话

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 白银 Silver
 
 
 
题目描述 Description

一个朋友网络,如果a认识b,那么如果a第一次收到某个消息,那么会把这个消息传给b,以及所有a认识的人。

如果a认识b,b不一定认识a。

所有人从1到n编号,给出所有“认识”关系,问如果i发布一条新消息,那么会不会经过若干次传话后,这个消息传回给了i,1<=i<=n。

输入描述 Input Description

第一行是n和m,表示人数和认识关系数。

接下来的m行,每行两个数a和b,表示a认识b。1<=a, b<=n。认识关系可能会重复给出,但一行的两个数不会相同。

输出描述 Output Description

一共n行,每行一个字符T或F。第i行如果是T,表示i发出一条新消息会传回给i;如果是F,表示i发出一条新消息不会传回给i。

样例输入 Sample Input

4 6

1 2

2 3

4 1

3 1

1 3

2 3

样例输出 Sample Output

T

T

T

F

数据范围及提示 Data Size & Hint

n<=1000

1<=a, b<=n

分类标签 Tags 点此展开

 
 
 
思路:
  判断每个人的话能不能传回自己
  用搜索就很容易ac
  但是今天的主要练习是tarjan
  (Q:tarjan是什么?)
  (A:不会面壁去,不懂百度去)
  用tarjan求出所有的环
  然后把每个点就标记一下
  每个标记指向这个点所属的环
  如果这个点所指向的环的元素个数大于1(成环能回到自己)则输出T
  否则(环的元素个数为1,只有他自己)输出F
 
 
 
  来,上代码:

#include<cstdio>
#include<iostream> using namespace std; struct node {
int from,to,next;
};
struct node edge[]; int n,m,num=,head[],dfn[],low[];
int tarjan_dfn=,tarjan_loop=,loop[];
int stack[],stack_top=,belong[]; bool map[][],flag[]; char ch; inline void edge_add(int from,int to)
{
num++;
edge[num].to=to;
edge[num].from=from;
edge[num].next=head[from];
head[from]=num;
} inline void qread(int &x)
{
x=;ch=getchar();
while(ch>''||ch<'') ch=getchar();
while(ch<=''&&ch>=''){x=x*+(int)(ch-'');ch=getchar();}
} void tarjan_forloop(int serc)
{
tarjan_dfn++;
dfn[serc]=tarjan_dfn;
low[serc]=tarjan_dfn;
stack_top++;
stack[stack_top]=serc;
flag[serc]=true;
for(int i=head[serc];i!=;i=edge[i].next)
{
if(!dfn[edge[i].to])
{
tarjan_forloop(edge[i].to);
low[serc]=min(low[serc],low[edge[i].to]);
}
else if(flag[edge[i].to]) low[serc]=min(low[serc],low[edge[i].to]);
}
if(low[serc]==dfn[serc])
{
tarjan_loop++;
while(stack[stack_top]!=serc)
{
loop[tarjan_loop]++;
belong[stack[stack_top]]=tarjan_loop;
flag[stack[stack_top]]=false;
stack_top--;
}
loop[tarjan_loop]++;
belong[stack[stack_top]]=tarjan_loop;
flag[stack[stack_top]]=false;
stack_top--;
}
} int main()
{
int from,to;
qread(n),qread(m);
for(int i=;i<=m;i++)
{
qread(from),qread(to);
if(map[from][to]) continue;
map[from][to]=true;
edge_add(from,to);
}
for(int i=;i<=n;i++) if(!dfn[i]) tarjan_forloop(i);
for(int i=;i<=n;i++)
{
if(loop[belong[i]]>)
{
putchar('T');
putchar('\n');
}
else
{
putchar('F');
putchar('\n');
}
}
return ;
}

AC日记——传话 codevs 1506 (tarjan求环)的更多相关文章

  1. codevs4511信息传递(Tarjan求环)

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  2. AC日记——信息传递 洛谷 P2661 (tarjan求环)

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  3. HDU - 6041:I Curse Myself(Tarjan求环&K路归并)

    There is a connected undirected graph with weights on its edges. It is guaranteed that each edge app ...

  4. AC日记——楼房 codevs 2995

    2995 楼房  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 地平线(x轴)上有n个矩(lou ...

  5. AC日记——蓬莱山辉夜 codevs 2830

    2830 蓬莱山辉夜  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 在幻想乡中,蓬莱山辉夜是月球 ...

  6. AC日记——热浪 codevs 1557 (最短路模板题)

    1557 热浪  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 德克萨斯纯朴的民眾们这个夏 ...

  7. AC日记——绿色通道 codevs 3342

    3342 绿色通道  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description <思远高考绿色通道&g ...

  8. AC日记——苹果树 codevs 1228

    1228 苹果树  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 在卡卡的房子外面,有一棵 ...

  9. AC日记——刺激 codevs 1958

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold     题目描述 Description saffah的一个朋友S酷爱滑雪,并且追求刺激(exitement,由于刺激 ...

随机推荐

  1. 从" ThinkPHP 开发规范 "看 PHP 的命名规范和开发建议

    稍稍水一篇博客,摘抄自Think PHP 的开发规范,很有引导性,我们可以将这些规范实践到原生 PHP 中. 命名规范 使用ThinkPHP开发的过程中应该尽量遵循下列命名规范: 类文件都是以.cla ...

  2. 【GOF23设计模式】命令模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_命令模式.数据库事务机制底层架构实现.撤销和回复 package com.test.command; public cla ...

  3. [ASP.NET MVC] 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC)

    [ASP.NET MVC] 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC) 程序代码下载 程序代码下载:点此下载 前言 ASP.NET Identity是微软所贡献的 ...

  4. 使用RDCMan管理SharePoint虚拟机的重复要求验证的问题

    首先,这个软件可以从这里下载: Remote Desktop Connection Manager 同类型的软件还有很多,我没有很多复杂功能的要求,就选择了这款微软官方的,虽然很久都没有更新过了. 为 ...

  5. SparseArray<E>详解

    SparseArray<E> 是官方推荐的用来替代 HashMap<Integer, E> 的一个工具类,相比来说有着更好的性能(其核心是折半查找函数(binarySearch ...

  6. [Android]编译错误:Could not get unknown property 'release' for SigningConfig container

    使用Gradle进行安卓编译时,出现如下错误: Could not get unknown property 'release' for SigningConfig container. 原因: 在主 ...

  7. Android——检查网络是否已经链接

    新建一个项目testNet 添加一个button layout.xml: <RelativeLayout xmlns:android="http://schemas.android.c ...

  8. oracle 表空间使用情况

    --表空间使用情况 SELECT a.tablespace_name "表空间名", round(total/1024/1024,2) "表空间大小", rou ...

  9. JDBC编程 之 增删改查

    JDBC编程之数据增加,更改,查询,删除 package com.good.jdbc; import java.sql.Connection; import java.sql.DriverManage ...

  10. PS网页设计教程XXIX——如何在PS中设计一个画廊布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...