zoukankan      html  css  js  c++  java
  • 05-树8 File Transfer (25 分)

    We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send a file from any computer on the network to any other?

    Input Specification:

    Each input file contains one test case. For each test case, the first line contains N (2), the total number of computers in a network. Each computer in the network is then represented by a positive integer between 1 and N. Then in the following lines, the input is given in the format:

    I c1 c2  
    

    where I stands for inputting a connection between c1 and c2; or

    C c1 c2    
    

    where C stands for checking if it is possible to transfer files between c1 and c2; or

    S
    

    where S stands for stopping this case.

    Output Specification:

    For each C case, print in one line the word "yes" or "no" if it is possible or impossible to transfer files between c1 and c2, respectively. At the end of each case, print in one line "The network is connected." if there is a path between any pair of computers; or "There are k components." where k is the number of connected components in this network.

    Sample Input 1:

    5
    C 3 2
    I 3 2
    C 1 5
    I 4 5
    I 2 4
    C 3 5
    S
    

    Sample Output 1:

    no
    no
    yes
    There are 2 components.
    

    Sample Input 2:

    5
    C 3 2
    I 3 2
    C 1 5
    I 4 5
    I 2 4
    C 3 5
    I 1 3
    C 1 5
    S
    

    Sample Output 2:

    no
    no
    yes
    yes
    The network is connected.
    #include<cstdio>
    const int maxn = 1010;
    
    void Initialization( int n);
    void Input_connection();
    int FindFather(int x);
    void Check_connection();
    void Check_network(int n);
    int arr[maxn];
    
    int main()
    {
        int n;
        char in;
        
        scanf("%d",&n);
        
        Initialization(n);
        
        do
        {
            getchar();
            scanf("%c",&in);
            switch(in)
            {
                
                case 'I':
                {
                    Input_connection();
                    break;
                }
                case 'C':
                {
                    Check_connection();
                    break;
                }
                case 'S':
                {
                    Check_network(n);
                    break;
                }
            }
        }while (in != 'S');
        return 0;
    
    }
    
    void Initialization( int n)
    {
        for (int i = 0; i <= n; i++)
        {
            arr[i] = i;    
        }    
    }
    
    void  Input_connection()
    {
        int u,v;
        scanf("%d %d",&u,&v);
        int faA = FindFather(u);
        int faB = FindFather(v);
        if (faA != faB)
        {
            arr[faA] = faB;
        }
    }
    
    int FindFather(int x)
    {
        if (arr[x] == x)
        {
            return x;
        }
        else
        {
            return arr[x] = FindFather(arr[x]);
        }
    }
    
    void Check_connection()
    {
        int u,v;
        scanf("%d %d",&u,&v);
        int faA = FindFather(u);
        int faB = FindFather(v);
        if (faA != faB)
        {
            printf("no
    ");
        }    
        else
        {
            printf("yes
    ");
        }
    }
    
    void Check_network(int n)
    {
        int cnt = 0;
        for (int i = 1; i <= n; i++)
        {
            if (arr[i] == i)
            {
                cnt++;
            }
        }
        
        if (1 == cnt)
        {
            printf("The network is connected.");
        }
        else
        {
            printf("There are %d components.",cnt);
        }
    }
  • 相关阅读:
    语法上的小trick
    [算法模版]斜率优化
    CF886E Maximum Element
    【hdu 1576】A/B(数论--拓展欧几里德 求逆元 模版题)
    【poj 3090】Visible Lattice Points(数论--欧拉函数 找规律求前缀和)
    【poj 2478】Farey Sequence(数论--欧拉函数 找规律求前缀和)
    【poj 1284】Primitive Roots(数论--欧拉函数 求原根个数){费马小定理、欧拉定理}
    【poj 2407】Relatives(数论--欧拉函数 模版题)
    【bzoj 2038】 [2009国家集训队]小Z的袜子(算法效率--莫队分块算法 模版题)
    【uva 1312】Cricket Field(算法效率--技巧枚举)
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11761751.html
Copyright © 2011-2022 走看看