首页 > 编程语言 >第十四届程序设计竞赛 H

第十四届程序设计竞赛 H

时间:2023-12-25 18:44:06浏览次数:26  
标签:竞赛 idx int 复杂度 vis 第十四届 程序设计 id dis

问题 H: 浙外办会展

此题对时间复杂度的要求好高,数组大小n*k(1e7)和时间复杂度n * k * logk(1e7-1e8)有点极限

思路:
题意从k种选s种,问最小代价
1.我们可以开二维数组ans[n][k],表示每个点i选种类是j的最小代价
2.这个可以bfs,算完之后,只需要sort从小到大,累加求和即可

如果你想到了这里,很遗憾,超时8%

分析,每个点都遍历一下,时间复杂度是n^2 肯定过不了;
考虑优化
我们发现很多点的种类是一样的,相当于多个源点向外扩散,每个点的最小值是距离源点最近的那个点,没错可以利用上次学到的优先队列维护最小值,时间复杂的为n* logn,可以。

一点点细节
int a[N];
int n,m,s,k;
vector<int> g[N];
int ans[N][105];
int vis[N][105];
struct node{
    int dis,id,idx;//距离,国家,种类
    bool operator < (const node &b)const{
        return dis>b.dis;
    }
};
priority_queue<node> q;
int bfs(){
    while(q.size()){
        auto t=q.top();
        q.pop();
        int dis=t.dis,id=t.id,idx=t.idx;
        if(vis[id][idx]) continue;
        vis[id][idx]=1;
        for(int v:g[id]){
            if(ans[id][idx]+1<ans[v][idx]){
                ans[v][idx]=ans[id][idx]+1;
                q.push({ans[v][idx],v,idx});
            }
        }
    }

}
void bu_f(){
    n=read(),m=read(),k=read(),s=read();
    for(int i=1;i<=n;i++) a[i]=read();
    for(int i=1;i<=m;i++){
        int x=read(),y=read();
        g[x].push_back(y);
        g[y].push_back(x);
    }
    memset(ans,INF,sizeof ans);
    for(int i=1;i<=n;i++){
        ans[i][a[i]]=0;//源点为0
        q.push({0,i,a[i]});//压入队列
    }
    bfs();
    for(int i=1;i<=n;i++){
        sort(ans[i]+1,ans[i]+k+1);//排序
        ll sum=0;
        for(int j=1;j<=s;j++){
            sum+=ans[i][j];//累加求和
        }
        write(sum);
        printf(" ");
    }
}

标签:竞赛,idx,int,复杂度,vis,第十四届,程序设计,id,dis
From: https://www.cnblogs.com/bu-fan/p/17926759.html

相关文章

  • python的任何题目开头加上一句class的语句就是面向对象程序设计吗
    Python的任何题目开头加上一句class的语句并不意味着是面向对象程序设计(Object-OrientedProgramming,OOP)。面向对象程序设计是一种编程范式,它将程序组织为对象的集合,每个对象都有自己的状态和行为,并且可以与其他对象进行交互。在Python中,使用class关键字可以定义类,类是对象的蓝图,描......
  • 2023-2024-1 20231319《计算机基础与程序设计》第十三周学习总结
    2023-2024-120231300《计算机基础与程序设计》第十三周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第x周作业这个作业的目标《C语言程序设计》第12章教材学习内容总结从基本......
  • 2023-2024-1 20231413 《计算机基础与程序设计》第十三周学习总结
    2023-2024-120231413《计算机基础与程序设计》第十三周学习总结1.作业信息班级:2023-2024-1-计算机基础与程序设计作业要求:2023-2024-1《计算机基础与程序设计》教学进程目标:自学教材:《C语言程序设计》第13章并完成云班课测试作业正文:https://www.cnblogs.com/Kaifazheju......
  • 2023-2024-1 20231321 《计算机基础与程序设计》第13周学习总结
    2023-2024-120231321《计算机基础与程序设计》第13周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2022-2023-1计算机基础与程序设计第一周作业)这个作业的目标<C语言程序设计第......
  • 2023-2024-1 20231415 《计算机基础与程序设计》第十三周学习总结
    这个作业属于哪个班级https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/这二个左右要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13作业目标《C语言程序设计》第12章并完成云班课测试作业正文https://i.cnblogs.com/posts/edit教材内......
  • 2023-2024-1 20231412 《计算机基础与程序设计》第13周学习总结
    2023-2024-120231412《计算机基础与程序设计》第13周学习总结作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业要求在哪里https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/13010这个作业的目标《C......
  • 2023-2024-1 20231425《计算机基础与程序设计》第十三周学习总结
    2023-2024-120231425《计算机基础与程序设计》第十三周学习总结2023-2024-120231425《计算机基础与程序设计》第十三周学习总结作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业要求在哪里2023-2024-1计算机基础与程序设计第十周......
  • 2023-2024-1 20231427 《计算机基础与程序设计》第十三周学习总结
    学期(如2023-2024-1)学号(如:20231300)《计算机基础与程序设计》第X周学习总结作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/()这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13()这个作业的目标<加入......
  • 2023-2024-1 20231326《计算机基础与程序设计》第十三周学习总结
    2023-2024-120231326《计算机基础与程序设计》第十三周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2022-2023-1计算机基础与程序设计第X周作业这个作业的目标《C语言程序设计》第十二章作业正文https://www.cn......
  • 2023-2024-1 20231418 《计算机基础与程序设计》第13周学习总结
    2023-2024-120231418《计算机基础与程序设计》第13周学习总结作业信息这个作业属于哪个课程<2023-2024-1-计算机基础与程序设计>这个作业要求在哪里<2023-2024-1计算机基础与程序设计第十三周作业>这个作业的目标<《C语言程序设计》第12章,上周测试题>作业正文......