博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019.03.28 bzoj3322: [Scoi2013]摩托车交易(kruskal重构树+贪心)
阅读量:4709 次
发布时间:2019-06-10

本文共 2147 字,大约阅读时间需要 7 分钟。

题意咕咕咕


思路:

先把所有可以列车通的缩成一个点,然后用新图建立kruskalkruskalkruskal重构树。
这样就可以倒着贪心模拟了。
代码:

#include
#define ri register int#define int long long#define fi first#define se secondusing namespace std;const int rlen=1<<18|1;inline char gc(){
static char buf[rlen],*ib,*ob; (ib==ob)&&(ob=(ib=buf)+fread(buf,1,rlen,stdin)); return ib==ob?-1:*ib++;}inline int read(){
int ans=0; bool f=1; char ch=gc(); while(!isdigit(ch))f^=ch=='-',ch=gc(); while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=gc(); return f?ans:-ans;}const int N=2e5+5,M=2e5+5;int rt,anc[N],id[N],n,m,q,qry[N],a[N],val[N],pass[N];inline int find(const int&x){
return x^anc[x]?anc[x]=find(anc[x]):x;}struct Node{
int u,v,w;friend inline bool operator<(const Node&a,const Node&b){
return a.w>b.w;}}g[M];vector
e[N];int dep[N],st[N][20];void dfs(int p){
for(ri i=1;i<20;++i)st[p][i]=st[st[p][i-1]][i-1]; for(ri i=0,v;i
>i)&1)x=st[x][i]; if(x==y)return val[x]; for(ri i=19;~i;--i)if(st[x][i]^st[y][i])x=st[x][i],y=st[y][i]; return val[st[x][0]];}inline void init(){
for(ri i=1;i<=n;++i)id[i]=i,anc[i]=i; for(ri x,pre=0;q;--q){
x=read(); if(!pre)pre=x; id[x]=pre; } sort(g+1,g+m+1); rt=n; for(ri i=1,fx,fy;i<=m;++i){
fx=find(id[g[i].u]),fy=find(id[g[i].v]); if(fx^fy){
val[++rt]=g[i].w,e[rt].push_back(fx),e[rt].push_back(fy),anc[fx]=anc[fy]=anc[rt]=rt;} } dfs(rt);}signed main(){
n=read(),m=read(),q=read(); for(ri i=1;i<=n;++i)qry[i]=read(); for(ri i=1;i<=n;++i)a[i]=read(); for(ri i=1;i<=m;++i)g[i].u=read(),g[i].v=read(),g[i].w=read(); init(); for(ri tmp,pre=0,i=n,p;i;--i){
p=qry[i]; if(a[p]<0)pre-=a[p]; else pass[p]=min(a[p],pre),pre-=pass[p]; if(i^1)tmp=query(id[p],id[qry[i-1]]); if(tmp!=0x3f3f3f3f)pre=min(pre,tmp); } for(ri i=1,p,tmp,pre=0;i<=n;++i){
p=qry[i]; if(a[p]<0)cout<<(tmp=min(-a[p],pre))<<'\n',pre-=tmp; else pre+=pass[p]; } return 0;}

转载于:https://www.cnblogs.com/ldxcaicai/p/10633601.html

你可能感兴趣的文章
20180827 360笔试客观题
查看>>
【转】使用YCSB测试mongodb分片集群性能
查看>>
StartSSL免费证书申请笔记
查看>>
Server.MapPath查询路径那几件事
查看>>
简单易懂的snmpd.conf配置文件说明
查看>>
引用 IP电话的原理结构及其关键技术
查看>>
cocos2d-x App 图标
查看>>
Eclipse中Outline里各种图标的含义
查看>>
css原生变量var()
查看>>
c++读文件-对try-throw-catch的应用
查看>>
常见的日期问题计算
查看>>
sql参数判断
查看>>
图形世界分裂的两派——理清D3D和OpenGL的脉络
查看>>
js字符串
查看>>
浅析java中setter和getter的作用
查看>>
maven工程运行前准备
查看>>
MonkeyRunner Python环境搭建
查看>>
利用Python批量重命名文件夹下文件
查看>>
webpack入门文档教程
查看>>
CSS 小技巧
查看>>