zoukankan      html  css  js  c++  java
  • b_lq_分考场(尽量安排到旧考场)

    n个人参加某项特殊考试。
    为了公平,要求任何两个认识的人不能分在同一个考场。
    求是少需要分几个考场才能满足条件。

    思路:问最少,当然是要我们尽量先塞爆放过人的考场啦...

    #include<bits/stdc++.h>
    using namespace std;
    const int N=105,inf=0x3f3f3f3f;
    int n,m,ans=inf,g[N][N],c[N]; //color[i][j]表示考场i的第j个人的编号
    vector<int> color[N];
    void dfs(int u, int s) { //u当前结点、s颜色(考场)总数
        if (s>=ans) return;
        if (u>n) {
            ans=min(ans, s);
            return;
        }
        for (int ls=1; ls<=s; ls++) { //尽量将u放入旧考场,检查之前的考场是否有人认识,第s个考场也能放
            bool valid=true;
            for (int id : color[ls]) if (g[u][id]) {
                valid=false;
                break;
            }
            if (valid) { //u和v所在考场的人都不认识,把u塞进去
                color[ls].push_back(u);
                dfs(u+1,s);
                color[ls].pop_back();
            }
        }//放入新考场s+1
        color[s+1].push_back(u);
        dfs(u+1,s+1);
        color[s+1].pop_back();
    }
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        cin>>n>>m;
        for (int i=0; i<m; i++) {
            int u,v; cin>>u>>v;
            g[u][v]=g[v][u]=1;
        }
        dfs(1,0), cout<<ans;
        return 0;
    }
    
  • 相关阅读:
    Mysql字段约束
    MYSQL中数据类型介绍
    Redis常见的几种使用方式及其优缺点
    python解析jason串,数据存入数据库
    redo log
    Oracle控制文件(Control Files)
    笔记
    redis面试题
    mysqldump备份
    超简单的内网穿透技巧(使用花生壳进行内网穿透)
  • 原文地址:https://www.cnblogs.com/wdt1/p/13950548.html
Copyright © 2011-2022 走看看