zoukankan      html  css  js  c++  java
  • Box and Ball

    5582: Box and Ball

    时间限制: 2 Sec  内存限制: 256 MB
    提交: 276  解决: 93
    [提交][状态][讨论版][命题人:admin]

    题目描述

    We have N boxes, numbered 1 through N. At first, box 1 contains one red ball, and each of the other boxes contains one white ball.

    Snuke will perform the following M operations, one by one. In the i-th operation, he randomly picks one ball from box xi, then he puts it into box yi.

    Find the number of boxes that may contain the red ball after all operations are performed.

    Constraints
    2≤N≤105
    1≤M≤105
    1≤xi,yi≤N
    xi≠yi
    Just before the i-th operation is performed, box xi contains at least 1 ball.

    输入

    The input is given from Standard Input in the following format:

    N M
    x1 y1
    :
    xM yM

    输出

    Print the number of boxes that may contain the red ball after all operations are performed.

    样例输入

    3 2
    1 2
    2 3
    

    样例输出

    2
    

    提示

    Just after the first operation, box 1 is empty, box 2 contains one red ball and one white ball, and box 3 contains one white ball.

    Now, consider the second operation. If Snuke picks the red ball from box 2, the red ball will go into box 3. If he picks the white ball instead, the red ball will stay in box 2. Thus, the number of boxes that may

    contain the red ball after all operations, is 2.

    //模拟取球过程 分类讨论 模拟法 

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    struct box
    {
        int num;
        int flag;
    }A[100005];
    
    int main()
    {
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            if(i==1)
            {
                A[i].flag = 1;
                A[i].num = 1;
            }
            else
            {
                A[i].flag = 0;
                A[i].num = 1;
            }
        }
        int x,y;
        for(int i=0;i<m;i++)
        {
            cin>>x>>y;
            if(A[x].flag==1)
            {
                if(A[x].num==1)
                {
                    A[y].flag = 1;
                    A[y].num++;
                    A[x].flag = 0;
                    A[x].num--;
                }
                else
                {
                    A[x].num--;
                    A[y].num++;
                    A[y].flag = 1;
                }
            }
            else
            {
                A[x].num--;
                A[y].num++;
            }
        }
        int ans = 0;
        for(int i=1;i<=n;i++)
        {
            if(A[i].flag==1)
            {
                ans++;
            }
        }
        cout<<ans;
    }
  • 相关阅读:
    Git 分支使用
    ansible 2.7 API
    zabbix api
    (四)ansible 通过堡垒机访问内网服务器
    C#实体对象出现中文处理乱码的问题
    mysql数据库数据(字段数过大)太多导入不了的解决方法
    MathWorks.MATLAB.NET.Arrays.MWArray”的类型初始值设定项引发异常 解决方法
    hibernate 主键生成方式
    HTN规划 jshop2
    自动驾驶
  • 原文地址:https://www.cnblogs.com/hao-tian/p/9037980.html
Copyright © 2011-2022 走看看