题目描述 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

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=10000+2;
int l[maxn];//入度
bool b[maxn][maxn];
int s=0;
void topsort(int n)
{int k=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(l[j]==0){l[j]--;k=j;s++;break;}}for(int j=1;j<=n;j++){if(b[k][j]==true){b[k][j]=false;l[j]--;}}}
}
int main()
{int n,m;scanf("%d%d",&n,&m);int u,v;memset(l,0,sizeof(l));memset(b,0,sizeof(b));while(m--){scanf("%d%d",&u,&v);if(b[u][v]==false){b[u][v]=true;l[v]++;}}topsort(n);if(s<n) cout<<"T_T"<<endl<<n-s<<endl;else cout<<"o(¡É_¡É)o"<<endl;return 0;
}

邻接表+优先队列

注意数组大小!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=25000+5;
int first[maxn],nxt[maxn],tot;
int ru[maxn];
int n,m;
int s=0;//弹出的点的数量
void init()
{memset(first,0xfff,sizeof(first));tot=0;return;
}
struct edge
{int f,t;
}l[maxn];
void build(int f,int t)
{l[++tot]=(edge){f,t};nxt[tot]=first[f];first[f]=tot;return;
}
void top_sort(int n)
{priority_queue<int,vector<int>,greater<int> >q;//优先队列  注意加空格 for(int i=1;i<=n;i++){if(ru[i]==0){q.push(i);//把入度为0的点放在队列中 ru[i]--;}}while(!q.empty()){int u=q.top();q.pop();s++;for(int i=first[u];i!=-1;i=nxt[i])//i!=-1的条件好好写别偷懒否则会错!{ru[l[i].t]--;if(ru[l[i].t]==0)q.push(l[i].t);}}return;
}
int main()
{scanf("%d%d",&n,&m);memset(ru,0,sizeof(ru));init();int f,t;for(int i=1;i<=m;i++){scanf("%d%d",&f,&t);build(f,t);ru[t]++;}top_sort(n);if(s<n) cout<<"T_T"<<'\n'<<n-s<<'\n';else cout<<"o(?é_?é)o"<<'\n';return 0;
}

【codevs 2833】奇怪的梦境相关推荐

  1. codevs 2833 奇怪的梦境

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

  2. 【CODEVS】2833 奇怪的梦境

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

  3. CODEVS P2833 奇怪的梦境

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

  4. 【codevs2833】奇怪的梦境 拓扑排序

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

  5. codevs奇怪的梦境(拓扑排序)

    拓扑排序练一发,思想在poj2367中写了 #include <cstdio> #include <iostream> #include <cstring> #in ...

  6. [wikioi]奇怪的梦境

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

  7. pandas获得指定行_pandas取dataframe特定行/列

    转自他人博客:https://blog.csdn.net/weixin_39586825/article/details/111758506 1.按列取.按索引/行取.按特定行列取 import nu ...

  8. XDUOJ题解合集(待填坑)

    1000 A + B Problem : 没啥好说的 . 1001 又是苹果(模拟): 用数组记录一下索引,交换行列时交换索引即可. 1002 小W的塔防(dp): 记 fi,jf_{i,j}fi,j ...

  9. ZCMU--5154: 体育运动

    Description 小 D 晚上经常犯困,为了避免犯困小 D 会进行体育运动来使自己保持清醒. 但是今天小 D 太困了,以致于他在操场跑圈的时候睡着了,他做了一个奇怪的梦境,梦中他处于一个巨大的长 ...

最新文章

  1. HackTheGame 攻略 - 第三关
  2. 服务器安全狗V4.1增强版 新增修复多项功能
  3. 液晶显示原理与ILI9341的使用
  4. python 获取当前时间 时间差
  5. c++ 宽搜(倒水)
  6. 关于MULE ESB相关的介绍
  7. duapp获取mysql用户名密码等等……
  8. Java Swagger的注释类是怎么被调用到的
  9. C# 监控字段_有哪些好的C#开源项目推荐?
  10. C++:20---成员变量初始化方式
  11. ExtJs2.0学习系列(13)--Ext.TreePanel之第二式
  12. 联想m7400更换墨粉盒怎么清零_联想M7400、7600打印机换粉盒或加碳粉后,仍提示缺粉?联想7400、7600硒鼓加粉清零图解...
  13. C# matlab中标准差计算方法
  14. (概率论习题册题解)第二章 随机变量及其分布
  15. PHICOMM路由器无线扩展的设置方法(吐槽一下)
  16. nodejs 结合 wechaty 实现你的微信群聊机器人二(iPad 协议)
  17. VS Code设置PHP可执行文件
  18. pythonweb图书管理系统_部署图书管理系统项目
  19. 全球通史读书笔记上(第六章——古代文明的新起)
  20. java JPanel设置边框和标题

热门文章

  1. open failed: EACCES (Permission denied)解决办法
  2. 一个关于封装、继承、多态的问题
  3. 教你用html+js制作一个自己的点名系统,实例代码分享
  4. ClickHouse学习教程
  5. 我爱Java系列之---【Git的使用教程】
  6. 信息学奥赛一本通:2026:【例4.12】阶乘和
  7. Oracle分区表概述、分类、使用方法及注意事项
  8. Matlab中sym无法使用
  9. [源码和文档分享]JAVA实现基于k-means聚类算法实现微博舆情热点分析系统
  10. cubuide RS485问题排查