• A Bug's Life


    Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

    Submit Status

    Description

    Background
    Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders and that they only interact with bugs of the opposite gender. In his experiment, individual bugs and their interactions were easy to identify, because numbers were printed on their backs.

    Problem
    Given a list of bug interactions, decide whether the experiment supports his assumption of two genders with no homosexual bugs or if it contains some bug interactions that falsify it.
     

    Input

    The first line of the input contains the number of scenarios. Each scenario starts with one line giving the number of bugs (at least one, and up to 2000) and the number of interactions (up to 1000000) separated by a single space. In the following lines, each interaction is given in the form of two distinct bug numbers separated by a single space. Bugs are numbered consecutively starting from one.
     

    Output

    The output for every scenario is a line containing "Scenario #i:", where i is the number of the scenario starting at 1, followed by one line saying either "No suspicious bugs found!" if the experiment is consistent with his assumption about the bugs' sexual behavior, or "Suspicious bugs found!" if Professor Hopper's assumption is definitely wrong.
     

    Sample Input

    2
    3 3
    1 2
    2 3
    1 3
     
    4 2
    1 2
    3 4
     

    Sample Output

    Scenario #1: Suspicious bugs found! Scenario #2: No suspicious bugs found!

    Hint

    Huge input,scanf is recommended. 


    #include<iostream>
    #include<cstdio>
    
    using namespace std;
    
    #define N 2010
    
    int f[N], v[N];   //  v 数组存的是下标与其根结点的性别状态,0代表同性,1代表异性,f存的是下标的根结点
    
    int found(int x)
    {
        int k = f[x];
    
        if(f[x] != x)
        {
            f[x] = found(k);  //  寻找根结点
            v[x] = (v[x]+v[k])%2;  // 根结点在变,v数组其与根结点的状态也要变,如果与其原先 
        }
        return f[x];
    }
    int main()
    {
        int t, a, b, n, m;
    
        cin >> t;
    
        for(int i = 1; i <= t; i++)
        {
            cin >> n >> m;
            int ok = 0;
    
            for(int j = 1; j <= n; j++)
                f[j] = j, v[j] = 0;
    
            while(m--)
            {
                cin >> a >> b;
    
                if(ok) continue;
    
                int na = found(a), nb = found(b);
    
                if(na == nb && (v[a]+1)% 2 != v[b])   //  如果两个数之前已经有了联系,并且联系不是正常的,同性恋(相等代表正常,ok置为1,就有可疑对象发现
                    ok = 1;
                if(na != nb)
                {
                    f[na] = nb;
    
                    v[na] = (1-v[a]+v[b])%2;   //  如果之前两个没有联系,就把两个数的根结点联系起来(根据已知其与根结点状态~
                }
            }
            if(i != 1)
                printf("
    ");
            printf("Scenario #%d:
    ", i);
            if(ok)
                printf("Suspicious bugs found!
    ");
            else
                printf("No suspicious bugs found!
    ");
        }
        printf("
    ");  // 格式控制,虽然我也没看见题上哪句话是这意思
        return 0;
    }

    之前一直不太懂什么意思,什么算同性恋,是opposite gender?醉了,是与当前已知条件矛盾。一个人和另一个人有关系就在一个树上,有点关系的都在一条树上。一棵树上应该与根结点状态一致,否则就是同性恋,不在一棵树上随便状态。。和食物链是不是一样,但是我根本都没想食物链的事。。

    头脑简单四肢发达的生物,想不出来一直想~

    让未来到来 让过去过去
  • 相关阅读:
    ssm框架整合入门系列——配置SpringMVC dispatcherServlet-servlet.xml
    vue学习——v-for语句
    ssm框架整合入门系列——编写ssm整合的关键配置文件(web.xml)
    ssm框架整合入门系列——maven工程引入jar包
    jQuery(7)——DOM操作 html,html,val,attr方法
    ssm框架整合入门系列——MyEclipse创建maven工程
    ssm框架整合入门系列——一个简单的用户管理系统
    Vue学习(0)——第一个demo
    jQuery(6)——jQuery animate动画
    julia开发环境安装——VS code扩展和JuliaPro两种方式
  • 原文地址:https://www.cnblogs.com/Tinamei/p/4674619.html
Copyright © 2020-2023  润新知