当前位置: 首页 > article >正文

算法竞赛进阶指南——搜索

树与图的遍历

可达性统计

在这里插入图片描述

#include<iostream>
#include<cstring>
#include<bitset>
using namespace std;
const int N = 3e4 + 10;
int h[N], e[N], ne[N], idx; //链式向前星
int q[N], hh, tt = -1; //队列
int r[N], a[N]; //r是入度,a是拓扑序列
bitset<N> f[N]; //存储当前点可以到哪些点
int n, m;

void add(int x, int y){
    e[idx] = y;
    ne[idx] = h[x];
    h[x] = idx;
    idx++;
}

void topsort(){
    for(int i = 1; i <= n; i++)
        if(!r[i]) q[++tt] = i;
    int k = 0;
    while(hh <= tt){
        int t = q[hh++];
        //存储拓扑序列
        a[k++] = t;
        for(int i = h[t]; i != -1; i = ne[i]){
            int j = e[i];
            r[j]--;
            if(!r[j]) q[++tt] = j;
        }
    }

}

int main(){
    memset(h, -1, sizeof(h));
    cin>>n>>m;
    int x, y;
    for(int i = 0; i < m; i++){
        cin>>x>>y;
        add(x, y);
        r[y]++;
    }
    topsort();
    //倒序遍历
    for(int i = n - 1; i >= 0; i--){
        int j = a[i];
        f[j][j] = 1;
        for(int k = h[j]; k != -1; k = ne[k])
            f[j] |= f[e[k]]; //累加
    }
    for(int i = 1; i <= n; i++) cout<<f[i].count()<<endl;
    return 0;
}

DFS

小猫爬山

在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 20;
int c[N], cnt[N]; //cnt是每辆车的重量
int n, w, ans = 1e9;

//u存储当前第几只猫,k存储当前有几辆车
void dfs(int u, int k){
    if(k >= ans) return;
    if(u > n){
        //这里car肯定小于ans
        ans = k;
        return;
    }
    //放到已有的车中
    for(int i = 1; i <= k; i++){
        if(cnt[i] + c[u] <= w){
            cnt[i] += c[u];
            dfs(u + 1, k);
            cnt[i] -= c[u];
        }
    }
    //放到新的车中
    cnt[k + 1] = c[u];
    dfs(u + 1, k + 1);
    cnt[k + 1] = 0;
}

int main(){
    cin>>n>>w;
    for(int i = 1; i <= n; i++) cin>>c[i];
    //大的先判断
    sort(c + 1, c + 1 + n);
    reverse(c + 1, c + 1 + n);
    dfs(1, 0);
    cout<<ans;
    return 0;
}

数独

在这里插入图片描述


http://www.kler.cn/a/233544.html

相关文章:

  • kafka面试题解答(四)
  • Linux 函数在多个地方被同时调用时,函数中的变量如何管理,确保互不影响
  • Electron 项目启动外部可执行文件的几种方式
  • GaussDB部署架构
  • 深入探讨 MySQL 配置与优化:从零到生产环境的最佳实践20241112
  • 人脸识别技术:从算法到深度学习的全面解析
  • 鸿蒙学习-app.json5配置文件
  • EMNLP 2023精选:Text-to-SQL任务的前沿进展(下篇)——Findings论文解读
  • Blazor Wasm Gitee 码云登录
  • EMC学习笔记(二十三)降低EMI的PCB设计指南(三)
  • 四、机器学习基础概念介绍
  • 一文彻底搞懂Kafka如何保证消息不丢失
  • Arthas使用教程—— 阿里开源线上监控诊断产品
  • 数据结构-并查集
  • 力扣231. 2 的幂(数学,二分查找,位运算)
  • H5/CSS 笔试面试考题(61-70)
  • TCP 传输控制协议——详细
  • Java强训day16(选择题编程题)
  • 【项目问题解决】java. net.SocketException: Connection reset
  • python命令行参数Argparse
  • Django(十)
  • rtt设备io框架面向对象学习-框架
  • 探索C语言的内存魔法:动态内存管理解析
  • 6 scala-面向对象编程基础
  • [word] word2019段落中创建纵横混排的方法图解教程 #知识分享#其他#职场发展
  • google scholar引用出现问题