Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >第21次CCF计算机软件能力认证 第四题 AcWing 3301. 星际旅行(二分、状压、树的距离)

第21次CCF计算机软件能力认证 第四题 AcWing 3301. 星际旅行(二分、状压、树的距离)

作者头像
glm233
发布于 2021-04-01 23:57:35
发布于 2021-04-01 23:57:35
34900
代码可运行
举报
运行总次数:0
代码可运行

首先只考虑一辆车,从某一个点出发的情况,它送完所有的酒店的最小时间为:

树形结构中子树(有需要运送的)边权之和*2-最长需要运送的点的长度。

暴力枚举处理从第i<n个点出发,运第j种食材的的最小时间。获得一个运送时间表。

二分答案,判断mid时间内是否可以完成运送。 运送时间表转化:在运送时间表中将可以在mid时间运达的记为1,否则为0。 在n行中选择最小的行使得每个食材都可以按时运达。==>状态压缩dp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<bits/stdc++.h>
using namespace std;
const int N=110,M=11;
#define x first
#define y second
typedef pair<int,int> pii;
int n,m,k,need[N][M],w[N<<1],ne[N<<1],e[N<<1],d[N][M],st[1<<M],f[1<<M],idx,h[N];
void add(int a,int b,int c){
    e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
pii dfs(int u,int fa,int v){
    pii res(0,-1);
    if(need[u][v])res.y=0;
    for(int i=h[u];~i;i=ne[i]){
        int j=e[i];
        if(j==fa)continue;
        auto ans=dfs(j,u,v);
        if(ans.y!=-1){
            res.x+=ans.x+w[i]*2;
            res.y=max(res.y,ans.y+w[i]);
        }
    }
    return res;
}
bool check(int x){
    memset(st,0,sizeof st);
    for(int i=1;i<=n;i++){
        for(int j=0;j<k;j++){
            if(d[i][j]<=x){
                st[i]|=(1<<j);
            }
        }
    }
    memset(f,0x3f,sizeof f);
    f[0]=0;
    for(int i=0;i<1<<k;i++){
        for(int j=1;j<=n;j++){
            f[i|st[j]]=min(f[i|st[j]],f[i]+1);
        }
    }
    return f[(1<<k)-1]<=m;
}
int main(){
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++){
        for(int j=0;j<k;j++)cin>>need[i][j];
    }
    memset(h,-1,sizeof h);
    for(int i=1;i<n;i++){
        int a,b,c;
        cin>>a>>b>>c;
        add(a,b,c),add(b,a,c);
    }
    for(int i=1;i<=n;i++){
        for(int j=0;j<k;j++){
            auto res=dfs(i,-1,j);
            if(res.y!=-1)d[i][j]=res.x-res.y;
        }
    }
    int l=0,r=2e8;
    while(l<r){
        int mid=l+r>>1;
        if(check(mid))r=mid;
        else l=mid+1;
    }
    cout<<l<<endl;
    
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
第二十次CCF计算机软件能力认证 第三题 点亮数字人生(拓扑序)
其实每个输入和元件都是一个点,可以输入到元件然后输出可以转为一条边,按要求跑一遍拓扑排序即可
glm233
2021/04/13
4060
2021(ICPC)亚洲区域赛昆明站(CGHIJLM)
有n个城市,每个城市归某个议院管辖,每次可以选择相邻的几座归属于同一个议院的城市,将他们交给别的议院管辖,问最少的操作数使得最终全部城市归属一个议院。初始状态时,一个议院最多管辖15座城市。
Here_SDUT
2022/08/09
1.2K0
第十六次CCF计算机软件能力认证 第五题 317号子任务(spfa)
3276. 317号子任务 “你在平原上走着走着,突然迎面遇到一堵墙,这墙向上无限高,向下无限深,向左无限远,向右无限远,这墙是什么?”——《流浪地球》原著 我们带着地球去流浪了,为了处理流浪过程中可
glm233
2021/03/15
3360
3. 基础搜索与图论初识
给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。
浪漫主义狗
2022/07/11
6670
3. 基础搜索与图论初识
AcWing 340. 通信线路(双端队列广搜 二分)
题意求1到N中路径第k+1大的权值的最小值 可以采用二分 然后我们可以利用二分的这个值作为分界线 小于等于这个值 置为0,大于则为1 然后就变成了一个无向图 权0或1的双端队列广搜模型
glm233
2021/03/23
4700
AcWing 340. 通信线路(双端队列广搜 二分)
第22次CCF计算机软件能力认证 第四题 校门外的树(dp)
思路:预处理出因数,然后dp #include<bits/stdc++.h> using namespace std; #define int long long const int N=1010,M=1e5+10,mod=1e9+7; vector<int>v[M]; bool st[M]; int f[N],n,a[N]; signed main(){ for(int i=1;i<M;i++){ for(int j=2*i;j<M;j+=i){ v[j]
glm233
2021/04/26
5741
第22次CCF计算机软件能力认证 第四题 校门外的树(dp)
算法最短路问题(从入门到精通)
推荐文章:https://cloud.tencent.com/developer/article/2474511?policyId=20240001&traceId=01jesmy38j9nrp142z5gzy1vqt 本文从LLM视角详细介绍了当下我们应该如何利用Java开发一个优质的AIGC应用,具有广泛应用意义
潋湄
2024/12/07
1550
算法最短路问题(从入门到精通)
2013年12月CCF计算机软件能力认证 第五题 I’m stuck!(逆向dfs bfs)
给定一个 RR 行 CC 列的地图,地图的每一个方格可能是 #, +, -, |, ., S, T 七个字符中的一个,分别表示如下意思:
glm233
2021/03/04
2580
AcWing 1135. 新年好 (卡spfa 需要用mlogn 的堆优化dij 枚举 )
先预处理 六个点最短路 然后暴力5!枚举即可~ 注意此题卡spfa 我用双端队列优化都不行 #include<bits/stdc++.h> using namespace std; const int N=50010,M=N<<2; typedef pair<int,int> PII; int e[M],idx,w[M],ne[M],h[N],sr[10],dist[10][N],res=0x3f3f3f3f,n,m; bool st[N]; inline void add(int a,int b,int
glm233
2021/03/17
3390
AcWing 1135. 新年好 (卡spfa 需要用mlogn 的堆优化dij 枚举 )
算法基础学习笔记——⑩DFS与BFS\树与图
命运之光
2024/03/20
1450
算法基础学习笔记——⑩DFS与BFS\树与图
C++如何处理图的存储方式
稀疏图,就是点数的平方与边数差的特别多,边数少,但点数多,就不行了,因为空间占用太大了。
苏州程序大白
2022/04/14
4690
C++如何处理图的存储方式
IME++ Starters Try-outs 2019 题解
显然如果有多棵树,则一定会存在无法到达的点。否则直接暴力 b f s bfs bfs求每个点到其余点的距离, a n s ans ans取 m a x max max即可
dejavu1zz
2020/12/02
6170
IME++ Starters Try-outs 2019 题解
洛谷P4589 [TJOI2018]智力竞赛(二分答案 二分图匹配)
多读读题就会发现题目要求的就是可相交的最小路径覆盖,那么按照套路先floyd一遍,如果能联通的话就再二分图中加边,然后判一下最大匹配数就行了。刚开始以为因为有的点可以不选,要在匈牙利的时候进行玄学贪心,其实是不用的,因为我们已经求过传递闭包了。所以直接求就是对的
attack
2019/03/19
4580
2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)
A------------------------------------------------------------------------------------ 题目链接:http://202.197.224.59/OnlineJudge2/index.php/problem/read/id/1260 题解:随机 n 个数把矩阵补全成 n × n 的。那么就是要算伴随矩阵的第一行,也就是逆矩阵的第一列,高斯消元即可。 源码:(Q神写的高斯消元,先贴一下诶,待补) 1 #include<cstdi
Angel_Kitty
2018/04/09
1.1K0
2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)
【算法竞赛】Namomo Winter 2023 Day 3 Div 2
Dashboard - 2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest - Codeforces
Livinfly
2023/01/11
3660
牛客小白月赛22 A~~J
A.链接:https://ac.nowcoder.com/acm/contest/4462/A 来源:牛客网
杨鹏伟
2020/09/11
4150
C语言问题-数据结构-迷宫问题
小叙:好长时间没写代码,确实有点生疏了。准备考研中,复习数据结构就想着我可以借此练练代码,刷一个数据结构专题。 题目·链接 题意:很直白一个BFS问题。
杨鹏伟
2021/01/27
1.9K0
河南工程学院第六届程序设计竞赛-A组-题解
HF 告诉 LYS 说:“我最近学习了二分开根号!!!” LYS 说:“那我给你出一个开五次方根的题目!” HF 感觉太简单了,就来找你们解决这个问题。
浪漫主义狗
2023/12/18
2750
河南工程学院第六届程序设计竞赛-A组-题解
SDUT 2021 Winter Individual Contest – C
有n个超市,有k条信息(i,s),表示物品s在编号为i的超市可以买到。有m个物品要买,给出m件物品的名称,要求按输入的顺序购买所有物品,且访问的超市的编号必须是非严格递增的,若找不到这样的方案输出impossible,若有多种方案输出ambiguous,否则输出unique。
Here_SDUT
2022/06/29
3270
备战复习 二分图最大匹配模板
匈牙利算法 #include<bits/stdc++.h> using namespace std; const int N=510,M=1e5+10; int n1,n2,e[M],ne[M],idx,h[N],ma[N],m; void add(int u,int v){ e[idx]=v,ne[idx]=h[u],h[u]=idx++; } bool st[N]; bool find(int x){ for(int i=h[x];~i;i=ne[i]){ int j=e
glm233
2021/04/01
3500
备战复习 二分图最大匹配模板
推荐阅读
相关推荐
第二十次CCF计算机软件能力认证 第三题 点亮数字人生(拓扑序)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验