嗨,我在SPOJ上做这个问题,但是我得到了WA,有人能帮忙吗这是我的密码。
我正试着用集合来解决这个问题我听说过使用二部图来解决这个问题,但我认为使用这种方法应该足够了,除非我的方法有一些错误我已经尝试了很多测试用例,但是我不知道我的代码在哪里失败了。
任何愿意帮助的人的附加测试用例:
https://www.spoj.com/problems/BUGLIFE/
测试用例的预期输出:
http://spojtoolkit.com/history/BUGLIFE
样本输入:

3 3个
12个
2 3个
13个
4 2个
12个
3 4个
样本输出:
情景1:
发现可疑虫子!
情景2:
没有发现可疑的虫子!
我的代码输出与预期输出相同。

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int t;
    cin >> t;
    for(int s = 0 ; s < t ; s++ ){
        int bugs , inter; // Bugs and Interactions
        cin >> bugs >> inter;
        map<int,int> isDiscovered , male , female;
        int bug1 , bug2;
        vector<pair<int , int> > b; //stores pair of interactions
        for(int i = 0 ; i < inter ; i++){
            cin >> bug1 >> bug2;
            b.push_back(make_pair(bug1,bug2));
        }
        sort(b.begin() , b.end());

        bool ans = true;

        for(int i = 0 ; i < b.size() ; i++){
            bug1 = b[i].first;
            bug2 = b[i].second;
            //both not classified
            if(isDiscovered.find(bug1) == isDiscovered.end() && isDiscovered.find(bug2) == isDiscovered.end()){
                isDiscovered[bug1]++;
                isDiscovered[bug2]++;
                male[bug1]++;
                female[bug2]++;
            }
            //one classified
            if(isDiscovered.find(bug1) != isDiscovered.end() || isDiscovered.find(bug2) != isDiscovered.end()){
                if(isDiscovered.find(bug1) == isDiscovered.end()){
                    //bug1 does not exist
                    isDiscovered[bug1]++;
                    if(male.find(bug2) == male.end()){
                        //bug2 is female
                        male[bug1]++;
                    }
                    else{
                        //bug2 is male
                        female[bug1]++;
                    }
                }
                else{
                    //bug2 does not exist
                    isDiscovered[bug2]++;
                    if(male.find(bug1) == male.end()){
                        //bug1 is female
                        male[bug2]++;
                    }else{
                        female[bug2]++;
                    }
                }
            }
            //both classified
            if(isDiscovered.find(bug1) != isDiscovered.end() && isDiscovered.find(bug2) != isDiscovered.end()){
                if(male.find(bug1) != male.end() && male.find(bug2) != male.end()){
                    //both males
                    ans = false;
                }
                else if(female.find(bug1) != female.end() && female.find(bug2) != female.end()){
                    //both females
                    ans = false;
                }
            }
            if(ans == false){
                break;
            }
        }
        cout << "Scenario #" << s+1 << ":" << endl;
        if(ans == false){
            cout << "Suspicious bugs found!" << endl;
        }
        else{
            cout << "No suspicious bugs found!" << endl;
        }

    }
    return 0;
}

最佳答案

如果两个虫子都是新的,你无条件地说第一个是雄性,第二个是雌性。不一定是这样。我们只能假设他们是不同性别的,但还没有理由指定性别。试用

4 2
2 1
3 4

(与情况2相同,第二对已交换)。

08-17 20:02