传 话
来源:互联网 发布:java list<map> 编辑:程序博客网 时间:2024/04/28 00:16
传 话
Time Limit:10000MS Memory Limit:65536K
Total Submit:24 Accepted:7
Case Time Limit:1000MS
Description
问题描述:兴趣小组的同学来自各个学校,为了增加友谊,晚会上又进行了一个传话游戏
如果A认识B,那么A收到消息,就会把消息传给B,以及所有A认识的人。
如果A认识B,B不一定认识A。
所有人从1到N编号,给出所有认识关系,问如果I发布一条消息,那么会不会经过若干次传话后,这个消息传回给了I,1<=i<=n。
Input
第一行是两个数N(N<1000)和M(M<10000),表示人数和认识关系数。
接下来M行,每行两个数A和B,表示A认识B。认识关系可能会重复给出,但一行的两个数不会相同。
Output
输出文件中一共有N行,每行一个字符T或F,从I发出一条消息,若能传回I则第I行为T,否则为F。
Sample Input
4 61 22 34 13 11 32 3
Sample Output
TTTF
判断 图的连通性,两种方法一种BFS,一种DFS,一开始用二维数组标记超时了,其实这题只要用一维就可以了。而且不用回溯的,
因为如果搜索到某层K,如果不是由i层转回到i层的一条回路,而是一条死路,那么以后必然也不用搜索这层了。
下面是AC代码:
#include<iostream>#include<queue>using namespace std;bool f[1010][1010];bool mark[1010];int n,m,a,b,flag,i;typedef pair<int ,int > pll;/*void dfs(int cur){for(int p=1;p<=n;p++){if(f[cur][p]){if(!mark[p]){mark[p]=1;dfs(p);if(mark[i]){flag=1;return ;}}}}}*/void bfs(int start){ queue<int >q; int p; q.push(start); while(!q.empty()){int temp=q.front(); q.pop();//if(temp=i) { flag=1; return 1;}for(p=1;p<=n;p++){if(f[temp][p]&&!mark[p]){mark[p]=1;q.push(p);}if(mark[i]) { flag=1; return ; }} }}int main(){cin>>n>>m;memset(f,0,sizeof(f));for(i=0;i<m;i++) scanf("%d%d",&a,&b), f[a][b]=1;for(i=1;i<=n;i++) { memset(mark,0,sizeof(mark)); flag=0;bfs(i);if(flag) printf("T\n"); else printf("F\n"); }return 0;}
- 传 话
- 网上疯传的一段话
- 话
- 话
- 话
- 传北京一机双号被叫停 固话终端不能当手机打
- 牢骚话,理想话
- 牢骚话
- 话超频
- 第一话
- 话单
- 第一话
- 一些话
- 话经典
- 西充话
- 大连话
- 牢骚话!!!
- 心底话
- boost::share_ptr智能指针使用示例
- DB Link使用 driving_site 调优问题
- servlet定时器的实现
- 如何实现combox 自动匹配查找
- eq()事件
- 传 话
- ubuntu11.10图标主题下载
- php高级注入
- C/C++ 内存和堆栈
- IBM量子计算机获重大突破 可进行百万项计算
- 视频: 电子制作基本知识
- javabean在jsp中的引用
- 虚拟机centosmysql通信问题及eclipse环境配置问题
- 显示GIF图片