zoukankan      html  css  js  c++  java
  • 分考场

    问题描述
      n个人参加某项特殊考试。
      为了公平,要求任何两个认识的人不能分在同一个考场。
      求是少需要分几个考场才能满足条件。
    输入格式
      第一行,一个整数n(1<n<100),表示参加考试的人数。
      第二行,一个整数m,表示接下来有m行数据
      以下m行每行的格式为:两个整数a,b,用空格分开 (1<=a,b<=n) 表示第a个人与第b个人认识。
    输出格式
      一行一个整数,表示最少分几个考场。
    样例输入
    5
    8
    1 2
    1 3
    1 4
    2 3
    2 4
    2 5
    3 4
    4 5
    样例输出
    4
    样例输入
    5
    10
    1 2
    1 3
    1 4
    1 5
    2 3
    2 4
    2 5
    3 4
    3 5
    4 5
    样例输出
    5
     
    代码:
     
    #include <iostream>
    #include <cstdio>
    #include <vector>
    #include <cstdlib>
    #include <cstring>
    #define inf 0x3f3f3f3f
    using namespace std;
    
    int n,m;
    bool gvis[101];
    int g[101];
    int u[10001],v[10001],first[10001],nex[10001];
    int ans;
    bool check(int k,int gi) {
        int kk = first[k];
        while(kk != -1) {
            if(g[v[kk]] == gi) return false;
            kk = nex[kk];
        }
        return true;
    }
    void dfs(int k,int num) {
        if(num >= ans) return;
        if(k > n) {
            ans = num;
            return;
        }
        for(int i = 1;i <= num + 1;i ++) {
            if(!gvis[i]) {
                gvis[i] = true;
                g[k] = i;
                dfs(k + 1,num + 1);
                g[k] = 0;
                gvis[i] = false;
            }
            else if(check(k,i)) {
                g[k] = i;
                dfs(k + 1,num);
                g[k] = 0;
            }
        }
    }
    int main() {
        scanf("%d%d",&n,&m);
        memset(first,-1,sizeof(first));
        ans = n;
        for(int i = 0;i < m;i ++) {
            scanf("%d%d",&u[i],&v[i]);
            nex[i] = first[u[i]];
            first[u[i]] = i;
            u[i + m] = v[i];
            v[i + m] = u[i];
            nex[i + m] = first[u[i + m]];
            first[u[i + m]] = i + m;
        }
        dfs(1,0);
        printf("%d",ans);
    }
  • 相关阅读:
    2020.06.09 手写数字识别-小数据集
    2020.6.1 深度学习-卷积
    2020.05.22 垃圾邮件分类2
    2020.05.08 分类与监督学习,朴素贝叶斯分类算法
    2020.04.27 主成分分析
    2020.04.27 特征选择
    2020.04.26 逻辑回归实践
    2020.04.24 逻辑归回
    2020.04.21 线性回归算法
    15 手写数字识别-小数据集
  • 原文地址:https://www.cnblogs.com/8023spz/p/10426323.html
Copyright © 2011-2022 走看看