zoukankan      html  css  js  c++  java
  • 2833 奇怪的梦境

    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<cstdio>
     3 #include<cstdlib>
     4 using namespace std;
     5 const int Maxn=1000000;
     6 struct Stack{
     7     int sz[Maxn];
     8     int top;
     9     int front()
    10     {
    11         return sz[top];
    12     }
    13     void pop()
    14     {
    15         top--;
    16     }
    17     void push(int x)
    18     {
    19          sz[++top]=x;      
    20     }
    21     int size()
    22     {
    23         return top;
    24     }
    25 }stack;
    26 struct Node{
    27     int u,v,w,next;
    28     int rd;
    29 }edge[Maxn];
    30 int head[Maxn];
    31 int n,m;
    32 int num=1;
    33 int rd[Maxn];
    34 void Add(int x,int y)
    35 {
    36     edge[num].u=x;
    37     edge[num].v=y;
    38     //edge[num].w=z;
    39     edge[num].next=head[x];
    40     rd[y]++;
    41     head[x]=num++;
    42 }
    43 void work()
    44 {
    45     int tot=0;
    46     for(int i=1;i<=m;i++)
    47      {
    48          int x,y;
    49          cin>>x>>y;
    50          Add(x,y);
    51      }
    52      for(int i=1;i<=n;i++)
    53       {
    54           if(rd[i]==0)
    55            {
    56                stack.push(i);
    57                tot++;
    58            }
    59       }
    60       while(stack.size()!=0)
    61        {
    62            int p=stack.front();
    63            stack.pop();
    64            for(int i=head[p];i!=-1;i=edge[i].next)
    65             {
    66                 rd[edge[i].v]--;
    67                 if(rd[edge[i].v]==0)
    68                  {
    69                      stack.push(edge[i].v);
    70                      tot++;
    71                  }
    72             }
    73        }
    74        if(tot==n)
    75         {
    76             cout<<"o(∩_∩)o";
    77             exit(0);
    78             //return 0;
    79         }
    80         else
    81         {
    82             cout<<"T_T"<<endl<<n-tot;
    83             exit(0);
    84             //return 0;
    85         }
    86 }
    87 int main()
    88 {
    89     cin>>n>>m;
    90     for(int i=1;i<=n;i++)
    91      {
    92          head[i]=-1;
    93      }
    94     work();
    95 }
  • 相关阅读:
    Objective C
    MySQL 存储过程,游标,临时表创建
    List connected users–similar to task manager
    游戏视频编辑
    游戏音频编辑
    UE4 AI BehaviorTree 动画播放完成通知机制
    UE4 AI BehaviorTree 各个节点执行顺序总结
    Holographic Remoting
    Hololens 手势事件执行顺序
    Hololens 硬件细节 Hardware Detail
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/6722926.html
Copyright © 2011-2022 走看看