码迷,mamicode.com
首页 > 其他好文 > 详细

刷过一题之消息转发

时间:2015-12-12 11:06:27      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

信息技术社团的同学来自各个班级,为了增加友谊,我们在课余时间进行了一个消息转发游戏,如果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 }

 

刷过一题之消息转发

标签:

原文地址:http://www.cnblogs.com/nightfury/p/5040888.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!