【BZOJ3322】【洛谷P3280】【SCOI2013】摩托车交易(Kruscal重构树+贪心)
BZOJ传送门
洛谷传送门
这道题和NOIPNOIPNOIP的那道货车运输有区别吗
做一个KruscalKruscalKruscal重构树就可以了
每次贪心暴力尽量选就是了
#include<bits/stdc++.h>
using namespace std;
inline int read(){char ch=getchar();int res=0,f=1;while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}while(isdigit(ch))res=(res<<3)+(res<<1)+(ch^48),ch=getchar();return res*f;
}
#define ll long long
const int N=300005;
const ll inf=1000000000000000ll;
int n,m,adj[N],nxt[N<<3],to[N<<3],fa[N<<1],f[N<<1],cnt,dep[N<<1],siz[N<<1],top[N<<1],son[N<<1],tot,q;
int pr[N],fi;
ll b[N],val[N<<1];
struct edge{int u,v;ll w;
}e[N<<1];
inline bool comp(const edge&a,const edge &b){return a.w>b.w;
}
inline void addedge(int u,int v) {nxt[++cnt]=adj[u],adj[u]=cnt,to[cnt]=v;
}
void dfs1(int u){siz[u]=1;for(int e=adj[u];e;e=nxt[e]){int v=to[e];if(v==fa[u])continue;fa[v]=u,dep[v]=dep[u]+1;dfs1(v),siz[u]+=siz[v];if(siz[v]>siz[son[u]])son[u]=v;}
}
void dfs2(int u,int tp){top[u]=tp;if(!son[u])return;dfs2(son[u],tp);for(int e=adj[u];e;e=nxt[e]){int v=to[e];if(v==fa[u]||v==son[u])continue;dfs2(v,v);}
}
int find(int x){return f[x]==x?f[x]:f[x]=find(f[x]);
}
inline int Lca(int u,int v){while(top[u]!=top[v]){if(dep[top[u]]<dep[top[v]])v=fa[top[v]];else u=fa[top[u]];}return dep[u]<dep[v]?u:v;
}
int main(){tot=n=read(),m=read(),q=read();for(int i=1;i<=n;i++)f[i]=i;for(int i=1;i<=n;i++)pr[i]=read();for(int i=1;i<=n;i++)b[i]=read();for(int i=1;i<=m;i++){e[i].u=read(),e[i].v=read(),e[i].w=read();}if(q)fi=read();for(int i=2;i<=q;i++){e[++m].u=fi,e[m].v=read(),e[m].w=inf;}sort(e+1,e+m+1,comp);for(int i=1;i<=m;i++){int f1=find(e[i].u),f2=find(e[i].v);if(f1!=f2){f[f1]=f[f2]=f[++tot]=tot;val[tot]=e[i].w;addedge(f1,tot),addedge(f2,tot);addedge(tot,f1),addedge(tot,f2);}}dfs1(tot),dfs2(tot,tot);int plc;ll now=0;plc=pr[1];if(b[pr[1]]>0)now=b[pr[1]];else cout<<0<<'\n';for(int i=2;i<=n;i++){now=min(now,val[Lca(pr[i],plc)]);if(b[pr[i]]>0)now+=b[pr[i]];else {b[pr[i]]=-b[pr[i]];cout<<min(b[pr[i]],now)<<'\n';now=max(now-b[pr[i]],(ll)0);}plc=pr[i];}
}
转载于:https://www.cnblogs.com/stargazer-cyk/p/10366331.html
【BZOJ3322】【洛谷P3280】【SCOI2013】摩托车交易(Kruscal重构树+贪心)相关推荐
- 货车运输--kruscal重构树板子
前置知识: kruscal重构树 用于求解有关两点间路径最大边权最小值和最小边权最大值问题 求解两点间路径最大边权最小值--最大生成树思想,优先选择权值大的边 求解两点间路径最小边权最大值--最小生成 ...
- 【IOI2018】狼人【Kruscal重构树】【主席树】
题意:nnn个点mmm条边的无向图,qqq次询问,每次给定s,t,L,Rs,t,L,Rs,t,L,R,判断是否存在一条sss到ttt的路径,使得路径上可以找到一点kkk,满足此路径s∼ks\sim k ...
- 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心
题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi,地面的高度是 h_0 = 0 ...
- SSL 2331 洛谷 1717 信息学奥赛一本通 1373 鱼塘钓鱼#贪心#
动态规划 温馨提示:交洛谷请在总时间*12并调整输入格式. 题目 设计一个钓鱼方案,从第1个鱼塘出发,希望能钓到最多的鱼. 分析 首先是贪心,最后在第i个鱼塘钓鱼的话,那么路上的时间是固定的,所以也可 ...
- 外卖(food) 洛谷4040宅男计划 三分套二分贪心
food评测传送门 [题目描述] 叫外卖是一个技术活,宅男宅女们一直面对着一个很大的矛盾,如何以有限的金钱在宿舍宅得尽量久. 外卖店一共有 N 种食物,每种食物有固定的价钱 Pi 与保质期 S ...
- 洛谷P1095守望者的逃离题解-伪动态规划/贪心
链接 题目描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很 ...
- 洛谷 - P3357 最长k可重线段集问题(最大费用最大流+思维建边+拆点)
题目链接:点击查看 题目大意:给出n条开线段,开线段的意思就是端点的两个点属于开区间,不属于线段中,让从中选出数条线段,满足: 在x轴选取任何一个点,选取线段向x轴映射到该点的次数小于等于k 所选线段 ...
- 洛谷 - P3358 最长k可重区间集问题(最大费用最大流+思维建边)
题目链接:点击查看 题目大意:给出n个开区间,现在要求从中选取一定数量的区间,需要满足: 对于任意点x,所选取的区间中包含点x的个数小于等于k 区间长度和最大 要求输出最长的区间长度和 题目分析:一开 ...
- 洛谷 P1589 泥泞路 2019青岛市竞赛(贪心)
题目链接 https://www.luogu.org/problemnew/show/P1589 解题思路 用结构体存下每一段泥泞路的左端点和右端点,然后用sort根据左端点排序,采用贪心的思想,从左 ...
最新文章
- exchange 2010 中OAB 排错一例
- sklearn自学指南(part55)--决策树
- java ee空指针_Java EE 7是最终版本。 思想,见解和进一步的指针。
- springboot a service调用b service_CaaS: 内容是新的基础设施 Content-as-a-Service
- 如何使用p6spy来监控sql
- 编写安全的驱动程序之输入输出检查
- 编程基本功:典型的柳氏风格命名一例
- VFIO PassThrough
- w10系统 怎么快捷搜索服务器,w10系统怎么远程连接服务器
- 用java编写圆锥,java编写圆锥形体积
- 推荐系统笔记(八):推荐系统中的长尾效应
- PS 2019 Mac版 自学入门系列(六)——裁剪和拉直图像
- 干货丨时序数据库DolphinDB脚本语言的混合范式编程
- Python爬虫基础:scrapy 框架—ltem和scrapy.Request
- VTS 固态雷达 OCEANGARD
- Oracle数据库精讲与疑难解析(第2版)
- Arduino Timer
- u盘被占用不能安全弹出怎么办?里面的文件怎么取出来
- unity 安卓应用名称多语言本地化
- matlab中绘制饼图_如何将第五个切块分离出来,matlab考试题及答案精选