zoukankan      html  css  js  c++  java
  • 牛客1102

    写在前面

    依旧是自闭的一场比赛lb.png

    T1 货物收集

    Idea

    使用优先队列

    比如样例

    4 7
    5 5 2
    1 3 2
    1 2 7
    1 4 5
    

    (请大家自己加上点权(滑稽

    0.png

    把能遍历的点的边权丢进队列。

    这样先走到3,收集到5的货物,需要武力值2

    货物不够,又走到4,收集到2的货物,总货物为7 ,需要武力值5。货物够了,那么答案就是5。

    Code

    namespace Sol{
        struct node{
            int v,to,net;
        }e[maxn<<1];
        int n,M,tot,ans,cnt;
        int head[maxn],a[maxn];
        bool vis[maxn];
        priority_queue<pair<int,int> >q;
        inline void add(int x,int y,int z){
            e[++tot].v=y; e[tot].to=z;
            e[tot].net=head[x]; head[x]=tot;
        }  
        inline int Main(){
            n=read(); M=read();
            for(int i=2;i<=n;i++) a[i]=read();  
            for(int i=1;i<n;i++){
                int x=read(),y=read(),z=read();
                add(x,y,z); add(y,x,z);
            }
            vis[1]=1;
            for(int i=head[1];i;i=e[i].net){
                int y=e[i].v;
                vis[y]=1;
                q.push(make_pair(-e[i].to,y));
            }
            while(ans<M){
                int x=-q.top().first;//武力值
                int y=q.top().second;//走到的节点
                q.pop();
                ans+=a[y];//收集到的总货物
                cnt=max(cnt,x);//比较武力值
                for(int i=head[y];i;i=e[i].net){
                    int yy=e[i].v;
                    if(vis[yy]) continue;
                    vis[yy]=1;
                    q.push(make_pair(-e[i].to,yy));
                }
            }
            printf("%d",cnt);
            return 0;
        }
    }
    

    T2货物分组

    Idea

    这里有篇博客和我思路差不多,但奈何我的常数比较优秀?

    为什么帖博客?因为我比较懒ts.png

    Code

    namespace Sol{ 
    	int n,M;
    	int f[maxn],s[maxn],a[maxn];
    	int maxx,minn;
        inline int Main(){
    		n=read(); M=read();
    		for(int i=1;i<=n;i++){
    			a[i]=read();
    			s[i]=s[i-1]+a[i];
    		}
    		for(int i=1;i<=n;i++){
    	        f[i]=f[i-1]-s[i-1];
    	        maxx=a[i]; minn=a[i];
    	        for(int j=i-2;j>=0&&s[j]>=s[i]-M;j--){
    	            maxx=max(maxx,a[j+1]);
    	            minn=min(minn,a[j+1]);
    	            if(f[i]>f[j]-s[j]+maxx-minn)
    	                f[i]=f[j]-s[j]+maxx-minn;
    	        }
    	        f[i]+=s[n];
    	    }
    		printf("%lld",f[n]);
    		return 0;
    	}
    }
    

    T3地形计算

    未写,等待更新ts.png

    [mathcal The quad End ]

    [愿你走出半生,还仍是少年 ]

  • 相关阅读:
    IE 创建条件样式
    Weinre
    three.js 之 透明物体不能正常显示
    用shader实现流动的水面(webgl)
    用js的方式运行c程序之webassemly
    three.js效果之热力图和轨迹线
    three.js后期之自定义shader通道实现扫光效果
    《计算机网络》物理层
    《计算机网络》概述
    pixi小游戏开发(vue+typescript)
  • 原文地址:https://www.cnblogs.com/cbyyc/p/11790277.html
Copyright © 2011-2022 走看看