1 条题解

  • 0
    @ 2025-4-7 21:50:23

    解题思路

    1. 可以将昆虫看作图中的节点,昆虫之间的互动看作边。要判断是否存在同性互动,即判断这个图是否是二分图。
    2. 二分图的判定可以使用染色法。对图中的节点进行染色,使得相邻节点颜色不同。如果在染色过程中出现相邻节点颜色相同的情况,那么这个图就不是二分图,也就说明存在同性互动。 实现步骤
    3. 初始化:创建一个数据结构来存储图的信息,比如邻接表,同时创建一个数组来记录每个节点的染色情况。
    4. 构建图:根据输入的昆虫互动信息,构建图的邻接表。
    5. 染色判断:从每个未染色的节点开始进行染色,使用深度优先搜索或广度优先搜索遍历图。在染色过程中,检查相邻节点的颜色是否与当前节点相同,如果相同则说明不是二分图。
    6. 输出结果:根据染色判断的结果,输出相应的信息。 代码:
    #include <iostream>
    #include <vector>
    #include <cstring>
    using namespace std;
    
    const int N = 2010;
    vector<int> g[N];
    int color[N];
    
    // 深度优先搜索染色函数
    bool dfs(int u, int c) {
        color[u] = c;
        for (int v : g[u]) {
            if (!color[v]) {
                if (!dfs(v, 3 - c)) {
                    return false;
                }
            } else if (color[v] == c) {
                return false;
            }
        }
        return true;
    }
    
    void solve() {
        int n, m;
        cin >> n >> m;
        // 初始化图和染色数组
        for (int i = 1; i <= n; i++) {
            g[i].clear();
            color[i] = 0;
        }
        // 构建图
        for (int i = 0; i < m; i++) {
            int a, b;
            cin >> a >> b;
            g[a].push_back(b);
            g[b].push_back(a);
        }
        // 染色判断
        bool flag = true;
        for (int i = 1; i <= n; i++) {
            if (!color[i]) {
                if (!dfs(i, 1)) {
                    flag = false;
                    break;
                }
            }
        }
        // 输出结果
        if (flag) {
            cout << "No suspicious bugs found!" << endl;
        } else {
            cout << "Suspicious bugs found!" << endl;
        }
    }
    
    int main() {
        int t;
        cin >> t;
        for (int i = 1; i <= t; i++) {
            cout << "Scenario #" << i << ":" << endl;
            solve();
            cout << endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1493
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    1
    上传者