zoukankan      html  css  js  c++  java
  • 第十五届四川省省赛 SCU

    给你一个一般图 保证每条边的一端下标不大于30 问最小覆盖集的大小为多少

    爆搜:枚举前30个点是否在覆盖集内

    剪枝1:如果不在的话 那么他所连的下标大于30的点都必须选

    剪纸2:最优解剪枝

    #include<bits/stdc++.h>
    using namespace std;
    int n, m;
    bitset<550> G[550], em;
    int cnt, ans;
    void dfs(int o, bitset<550> a)
    {
        if (a.count() >= ans) {
            return;
        }
        if (o == n + 1 || o > 30) {
            ans = min(ans, (int)a.count());
            return;
        }
        if (a[o] == 1) {
            dfs(o + 1, a);
            return;
        }
        a[o] = 1;
        dfs(o + 1, a);
        a[o] = 0;
        a |= G[o];
        dfs(o + 1, a);
    }
    int main()
    {
        while (scanf("%d %d", &n, &m) != -1) {
            ans = 30;
            for (int i = 1; i <= n; i++) {
                G[i].reset();
            }
            for (int i = 0, u, v; i < m; i++) {
                scanf("%d %d", &u, &v);
                G[u][v] = G[v][u] = 1;
            }
            dfs(1, em);
            printf("%d
    ", ans);
        }
    }
    View Code
  • 相关阅读:
    jquery收集
    c#语法
    asp.net+MVC
    在线OFFICE方案
    NodeJs中require use get typescript及其他知识点集合
    $.data()
    mongodb 安装、windows服务、创建用户
    Nodejs&Express
    Nodejs + MongoDb
    Nodejs
  • 原文地址:https://www.cnblogs.com/Aragaki/p/9905601.html
Copyright © 2011-2022 走看看