刷过一题之消息转发

信息技术社团的同学来自各个班级,为了增加友谊,我们在课余时间进行了一个消息转发游戏,如果a认识b,那么a收到某个消息,就会把这个消息传给b,以及所有a认识的人。如果a认识b,b不一定认识a。所有人从1到n编号,给出所有“认识”关系,问如果i号同学发布一条新消息,那么会不会经过若干次转发后,这个消息又传回给了i(1<=i<=n)?

输入:

第一行是两个数n(n<1000)和m(m<10000),分别表示人数和认识关系数。接下来的m行,每行两个数a和b,表示a认识b。1<=a和 b<=n。认识关系可能会重复给出,但一行的两个数不会相同。每行的两个数之间有一个空格分隔。

输出:

一行共有n个字符(只能是T或F)。第i个字符:如果是T,表示i号同学发出一条新消息会传回给i;如果是F,表示i号同学发出一条新消息不会传回给i。

输入示例:

4 6
1 2
2 3
4 1
3 1
1 3
2 3

输出示例:

TTTF

其实这题正解是用DFS,但是我还是用了树……

 1 #include<iostream>
 2 using namespace std;
 3 bool ans[10005];
 4 int read()
 5 {
 6     int x=0,f=1;
 7     char ch=getchar();
 8     while(ch<‘0‘||ch>‘9‘)
 9     {
10         if(ch==‘-‘) f=-1;
11         ch=getchar();
12     }
13     while(ch>=‘0‘&&ch<=‘9‘)
14     {
15         x=x*10+ch-‘0‘;
16         ch=getchar();
17     }
18     return x*f;
19 }
20 int main()
21 {
22     int a,b,temp,l=1,flag=1;
23     b=read();a=read();
24     int n[a],m[a];
25     for(int i=0;i<a;i++) {n[i]=read();m[i]=read();}
26     for(int i=0;i<a-1;i++)
27         for(int j=i+1;j<a;j++)
28             if(n[i]>n[j])
29             {
30                 swap(n[i],n[j]);
31                 swap(m[i],m[j]);
32             }
33     while(l<=b)
34     {
35         for(int i=0;i<a;i++) if(n[i]==l) ans[m[i]]=true;
36         for(int i=0;i<a;i++) if(ans[n[i]]==true) ans[m[i]]=true;
37         for(int i=0;i<a;i++) if(ans[n[i]]==true) ans[m[i]]=true;
38         if(ans[l]==true) cout<<"T";
39         else if(ans[l]==false) cout<<"F";
40         memset(ans,0,sizeof(ans));
41         l++;
42     }
43     system("pause>nul");
44     return 0;
45 }
时间: 2024-10-05 04:41:00

刷过一题之消息转发的相关文章

Effective Objective-C 2.0 — 第12条:理解消息转发机制

11 条讲解了对象的消息传递机制 12条讲解对象在收到无法解读的消息之后会发生什么,就会启动“消息转发”(message forwarding)机制, 若对象无法响应某个选择子,则进入消息转发流程. 1,通过运行期的动态方法解析功能,可以在需要用到某个方法时再将其加入类中. 2,对象可以把其无法解读的某些选择子转交给其他对象来处理. 经过上述两步之后,如果还是没办法处理选择子,那就启动完整的消息转发机制. 动态方法解析 对象在收到无法解读的消息之后,首先调用其所属类的下列类方法 + (BOOL)

iOS开发-消息转发

消息转发是OC运行时比较重要的特性,Objective-C运行时的主要的任务是负责消息分发,我们在开发中"unrecognized selector sent to instance xx",实例对象没有实现对应的消息,通常我们只需要实现未实现的方法即可.一般情况我们处理一个方法,运行时寻找匹配的selector然后执行,但是有时候只想在运行时才创建某个方法,消息确没有具体的实现,这个时候就会出出现运行时错误,按照消息转发的顺序我们有三种解决办法. 动态方法处理 首先我们来看一个简单的

动态方法决议 和 消息转发

如果我们在 Objective C 中向一个对象发送它无法处理的消息,会出现什么情况呢?我们知道发送消息是通过 objc_send(id, SEL, ...) 来实现的,它会首先在对象的类对象的 cache,method list 以及父类对象的 cache, method list 中依次查找 SEL 对应的 IMP:这个是需要对类对象的结构熟悉,不清楚的可以参考我的下一篇文章<object-c 类结构解析>,如果没有找到且实现了动态方法决议机制就会进行决议,如果没有实现动态方法决议机制或决

IOS 消息转发

最近在看消息转发的资料,发现大部分都是理论知识,很少有完整的代码.现在以代码的形式形象的解释一下: 用Xcode创建一个工程 1.正常方法调用 创建一个类Person 代码如下 Person.h代码如下: #import <Foundation/Foundation.h> @interface Person : NSObject - (instancetype)init NS_UNAVAILABLE; - (instancetype)initWithUserName:(NSString *)u

第12条:理解消息转发机制

要点 若对象无法响应某个选择子,则进入消息转发流程. 通过运行期的动态方法解析功能,我们可以在需要用到某个方法时再将其加入类中. 对象可以把其无法解读的某些选择子转交给其他对象来处理. 经过上述两步之后,如果还是没办法处理选择子,那就启动完整的消息转发机制.

ios底层开发消息机制(四)消息转发

消息转发 若想令类能理解某条消息,我们必须以程序码实现出对应的方法才行.但是,在编译期向类发送了其无法解读的消息并不会报错,因为在运行期可以继续向类中添加方法,所以编译器在编译时还无法确知类中到底会不会有某个方法实现.当对象接收到无法解读的消息后,就会启动“消息转发”(message forwarding)机制,程序员可经由此过程告诉对象应该如何处理未知消息. 你可能早就遇到过经由消息转发流程所处理的消息了,只是未加留意.如果在控制台中看到下面这种提示信息,那就说明你曾向某个对象发送过一条其无法

runtime总结二之消息机制(包括消息转发,消息交换的黑魔法)

runtime的消息机制 前面提到过编译器最终会把我们的消息发送转化为函数调用 消息发送 [object sendMassage] 首先编译器会在运行时将上面的例子转化为objc_msgSend(obj,@selector(sendMassage))这个函数,转换的时候除了方法本身的参数之外,还有两个隐藏的参数一个是id类型的,代表对象的类型,还是一个是SEL类型的,是函数对应的方法的编号,接下来就会按照下面的流程来调用这个方法 通过obj的isa指针找到其所对应的类. 通过SEL先去类的cac

netty实现消息转发服务

1.结构图 2.消息服务器 消息服务器(SNS)由Http Netty Server(HNS)和WebSocket Netty Server(WNS)组成.HNS采用Netty Http+XML协议栈开发实现,WNS采用Netty WebSocket+JSON实现. HNS只接收预定义的HttpXmlRequest类型的数据,这由编解码器控制,编解码器是继承了MessageToMessageDecoder<T>和MessageToMessageEncoder<T>这两个编解码基础类

runtime消息转发机制

Objective-C 扩展了 C 语言,并加入了面向对象特性和 Smalltalk 式的消息传递机制.而这个扩展的核心是一个用 C 和 编译语言 写的 Runtime 库.它是 Objective-C 面向对象和动态机制的基石. Objective-C 是一个动态语言,这意味着它不仅需要一个编译器,也需要一个运行时系统来动态得创建类和对象.进行消息传递和转发.理解 Objective-C 的 Runtime 机制可以帮我们更好的了解这个语言,适当的时候还能对语言进行扩展,从系统层面解决项目中的