2833 奇怪的梦境

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
题目描述 Description

Aiden陷入了一个奇怪的梦境:他被困在一个小房子中,墙上有很多按钮,还有一个屏幕,上面显示了一些信息。屏幕上说,要将所有按钮都按下才能出去,而又给出了一些信息,说明了某个按钮只能在另一个按钮按下之后才能按下,而没有被提及的按钮则可以在任何时候按下。可是Aiden发现屏幕上所给信息似乎有矛盾,请你来帮忙判断。

输入描述 Input Description

第一行,两个数N,M,表示有编号为1...N这N个按钮,屏幕上有M条信息。

接下来的M行,每行两个数ai,bi,表示bi按钮要在ai之后按下。所给信息可能有重复,保证ai≠bi。

输出描述 Output Description

若按钮能全部按下,则输出“o(∩_∩)o”。

若不能,第一行输出“T_T”,第二行输出因信息有矛盾而无法确认按下顺序的按钮的个数。输出不包括引号。

样例输入 Sample Input

3 3

1 2

2 3

3 2

样例输出 Sample Output

T_T

2

数据范围及提示 Data Size & Hint

对于30%的数据,保证0<N≤100。

对于50%的数据,保证0<N≤2000。

对于70%的数据,保证0<N≤5000。

对于100%的数据,保证0<N≤10000,0<M≤2.5N。

思路:

  拓扑排序,两种写法

代码一:

  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdio>
  4. #include <queue>
  5.  
  6. using namespace std;
  7.  
  8. const int M = ;
  9. int n,m,ans,now;
  10. int ru[M],head[M];
  11. queue<int>q;
  12.  
  13. struct A{
  14. int next,to;
  15. }e[*M];
  16.  
  17. void add(int u,int v)
  18. {
  19. e[++now].to=v;
  20. e[now].next=head[u];
  21. head[u]=now;
  22. }
  23.  
  24. void topo()
  25. {
  26. for(int i=;i<=n;i++)
  27. if(ru[i]==)
  28. q.push(i);
  29. while(!q.empty())
  30. {
  31. int u=q.front();
  32. q.pop();
  33. ans++;
  34. for(int i=head[u];i!=-;i=e[i].next)
  35. {
  36. int v=e[i].to;
  37. ru[v]--;
  38. if(ru[v]==)
  39. q.push(v);
  40. }
  41. }
  42. if(ans<n)
  43. {
  44. printf("T_T\n%d",n-ans);
  45. return;
  46. }
  47. else
  48. {
  49. printf("o(n_n)o");
  50. return;
  51. }
  52. }
  53.  
  54. int main()
  55. {
  56. scanf("%d%d",&n,&m);
  57. memset(head,-,sizeof(head));
  58. for(int i=,a,b;i<=m;i++)
  59. {
  60. scanf("%d%d",&a,&b);
  61. add(a,b);
  62. ru[b]++;
  63. }
  64. topo();
  65. return ;
  66. }

队列版

代码二:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <queue>
  4.  
  5. using namespace std;
  6.  
  7. const int M = ;
  8. int n,m,k,ans;
  9. bool dad[M][M];
  10. int ru[M];
  11.  
  12. int main()
  13. {
  14. scanf("%d%d",&n,&m);
  15. for(int i=,a,b;i<=m;i++)
  16. {
  17. ///b在a之前按下
  18. scanf("%d%d",&a,&b);
  19. if(!dad[a][b]) ru[b]++;
  20. dad[a][b]=true;
  21. }
  22. for(int i=;i<=n;i++)
  23. {
  24. k=;///记得将k进行初始化,防止漏下找入度为零的点
  25. while(k<=n && ru[k]!=) k++;///找入度为零的点
  26. if(k<=n && ru[k]==)
  27. {
  28. ans++;///统计答案个数
  29. ru[k]=-;///删边
  30. for(int j=;j<=n;j++)
  31. if(dad[k][j])
  32. ru[j]--;///删边
  33. }
  34. }
  35. if(ans==n) printf("o(n_n)o");
  36. else printf("T_T\n%d\n",n-ans);
  37. return ;
  38. }

for循环版

Ps:如果让我进行选择,我会毫不犹豫的选择第一种,因为跑得快而且内存占用小!!!

codevs2833 奇怪的梦境 x的更多相关文章

  1. codevs2833 奇怪的梦境

    2833 奇怪的梦境  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Aiden陷入了一个奇怪的梦境:他被困 ...

  2. 奇怪的梦境(codevs 2833)

    题目描述 Description Aiden陷入了一个奇怪的梦境:他被困在一个小房子中,墙上有很多按钮,还有一个屏幕,上面显示了一些信息.屏幕上说,要将所有按钮都按下才能出去,而又给出了一些信息,说明 ...

  3. Codevs 2833 奇怪的梦境

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description Aiden陷入了一个奇怪的梦境:他被困在一个小房子中,墙上有很多按钮,还 ...

  4. 2833 奇怪的梦境 未AC

    2833 奇怪的梦境 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold         题目描述 Description Aiden陷入了一个奇怪的梦境:他被困在一个小 ...

  5. CODEVS——T 2833 奇怪的梦境

    http://codevs.cn/problem/2833/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descr ...

  6. 【CODEVS】2833 奇怪的梦境

    2833 奇怪的梦境 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Aiden陷入了一个奇怪的梦境:他被困在一个小房子中,墙上有很 ...

  7. [wikioi]奇怪的梦境

    http://wikioi.com/problem/2833/ 拓扑排序,居然1A,哈哈. #include <cstdio> #include <iostream> #inc ...

  8. 【拓扑排序】CODEVS 2833 奇怪的梦境

    拓扑排序模板. #include<cstdio> #include<vector> #include<stack> using namespace std; #de ...

  9. 1、Codevs 必做:2833、1002、1003、2627、2599

    2833 奇怪的梦境  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Aiden陷入了一个奇怪的梦境:他被困 ...

随机推荐

  1. 完全卸载oracle11g步骤(不可行,直接用oracle自用删除就行)

    完全卸载oracle11g步骤:1. 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务.2. 开始->程序->oracle - OraHome ...

  2. CSP-S 2019游记

    Day 0 下午到了广州,酒店还不错,不好的是附近没有什么吃饭的地方 zyd和ljz巨神说如果上了450就女装. 晚上看了一下写过模板,本来准备敲几个新模板的的结果被卡常,心态没了.于是又把wys的卡 ...

  3. gcc数据对齐之: howto 1.

    GCC支持用__attribute__为变量.类型.函数.标签指定特殊属性.这些不是编程语言标准里的内容,而属于编译器对语言的扩展. 本文介绍其中的两个属性:aligned和packed. align ...

  4. laravel5.5入门-安装和认证

    一.安装 在终端CMD里切换到你想要放置该网站的目录下(如 d:\project\laravel),运行命令 composer create-project laravel/laravel learn ...

  5. RocketMQ吐血总结

    RocketMQ吐血总结 架构 概念模型 最基本的概念模型与扩展后段概念模型 存储模型 RocketMQ吐血总结 User Guide RocketMQ是一款分布式消息中间件,最初是由阿里巴巴消息中间 ...

  6. 【网络安全】telnet 登陆远程服务器

    • 实验环境:        a. Vmware 14 PRO        b. windows 7 x64 客户机        c. windows server 2008 R2 x64 服务器 ...

  7. crm客户资源显示控制

    为便于员工之间的良性竞争,避免恶意挖客户,对于不同的登录用户,在客户列表中只显示当用用户自己所拥有的客户列表. ---具体的,通过在列表显示界面的列表查询语句中增加根据用户id查询其对应的客户资源的条 ...

  8. iOS 跳转系统设置界面

    iOS 跳转系统设置界面   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=Pri ...

  9. iOS常用的数学函数

    1. 三角函数    double sin (double);正弦    double cos (double);余弦    double tan (double);正切    2 .反三角函数    ...

  10. 使用MEMCACHED实现缓存

    什么是memcached Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fit ...