zoukankan      html  css  js  c++  java
  • 洛谷P1330 封锁阳光大学 题解 DFS判二分图

    题目链接:https://www.luogu.com.cn/problem/P1330

    解题思路:DFS,判断每一个连通块是不是二分图。

    实现代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 10010;
    vector<int> g[maxn];
    bool vis[maxn];
    int n, m, u, v, cnt[2], color[maxn], ans;
    bool dfs(int u, int c) {
        vis[u] = true;
        color[u] = c;
        cnt[c] ++;
        int sz = g[u].size();
        for (int i = 0; i < sz; i ++) {
            int v = g[u][i];
            if (!vis[v] && !dfs(v, !c)) {
                return false;
            }
            else if (vis[v] && color[v] == color[u]) {
                return false;
            }
        }
        return true;
    }
    int main() {
        cin >> n >> m;
        while (m --) {
            cin >> u >> v;
            g[u].push_back(v);
            g[v].push_back(u);
        }
        for (int i = 1; i <= n; i ++) {
            if (!vis[i]) {
                cnt[0] = cnt[1] = 0;
                if (!dfs(i, 0)) {
                    puts("Impossible");
                    return 0;
                }
                else {
                    ans += min(cnt[0], cnt[1]);
                }
            }
        }
        cout << ans << endl;
        return 0;
    }
    
  • 相关阅读:
    120.三角形最短路径(leetcode)
    Python Pycharm中灵活运用debugger
    POJ 1284
    POJ 2407
    POJ 1811
    HDU 1164
    HDU 4228
    HDU 2521
    HDU 4133
    ZOJ 2562 反素数
  • 原文地址:https://www.cnblogs.com/quanjun/p/12814937.html
Copyright © 2011-2022 走看看