题目:dtoj2797旅行商

其实就是裸的网络流套树剖套线段树其实代码不难码

emmmmmm我决定草率的直接上代码,这可能是一条无营养的博客....

#include<bits/stdc++.h>
#define _(d) while(d(isdigit(ch=getchar())))
#define il inline
using namespace std;
const int N=2e5+5,M=4e6+5,inf=2e9;int n,m,ne[M],to[M],head[N],v[M],d[N],val[N],s,t,ans;
int ne1[N<<1],to1[N<<1],head1[N],fa[N],sz[N],son[N],d1[N],idx[N],tot,num[N],top[N],cnt;queue<int> q;
int read(){int x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch-48;_()x=x*10+ch-48;return f*x;}
il void insert(int x,int y,int z){ne[++cnt]=head[x];head[x]=cnt;to[cnt]=y;v[cnt]=z;}
il void add(int u,int v,int w){insert(u,v,w);insert(v,u,0);}
il void ins(int x,int y){ne1[++cnt]=head1[x];head1[x]=cnt;to1[cnt]=y;}
il bool bfs(){memset(d,-1,sizeof(d));q.push(s);d[s]=1;while(!q.empty()){int x=q.front();q.pop();for(int i=head[x];i;i=ne[i]){if(!v[i]||d[to[i]]!=-1)continue;q.push(to[i]);d[to[i]]=d[x]+1;}}return d[t]!=-1;
}
int dfs(int x,int f){if(x==t)return f;int w,used=0;for(int i=head[x];i;i=ne[i]){if(d[x]+1!=d[to[i]]||(!v[i]))continue;w=f-used;w=dfs(to[i],min(w,v[i]));v[i]-=w;v[i^1]+=w;used+=w;if(used==f)return used;}if(!used)d[x]=-1;return used;
}
il void dinic(){while(bfs()){ans+=dfs(s,inf);}}
void dfs1(int x){sz[x]=1;int maxn=-1;for(int i=head1[x];i;i=ne1[i]){if(to1[i]==fa[x])continue;d1[to1[i]]=d1[x]+1;fa[to1[i]]=x;dfs1(to1[i]);sz[x]+=sz[to1[i]];if(sz[to1[i]]>maxn)maxn=sz[to1[i]],son[x]=to1[i];}
}
void dfs2(int x,int rt){top[x]=rt;idx[x]=++tot;num[tot]=x;if(!son[x])return;dfs2(son[x],rt);for(int i=head1[x];i;i=ne1[i]){if(idx[to1[i]])continue;dfs2(to1[i],to1[i]);}
}
void build(int x,int l,int r){if(l==r){add(m+x,t,val[num[l]]);return;}int mid=(l+r)>>1;build(x<<1,l,mid);build(x<<1|1,mid+1,r);add(m+x,m+(x<<1),inf);add(m+x,m+(x<<1|1),inf);
}
void intervallink(int x,int l,int r,int ql,int qr,int k){if(ql<=l&&r<=qr){add(k,m+x,inf);return;}int mid=(l+r)>>1;if(ql<=mid)intervallink(x<<1,l,mid,ql,qr,k);if(mid<qr)intervallink(x<<1|1,mid+1,r,ql,qr,k);
}
il void Treelink(int x,int y,int k){while(top[x]!=top[y]){if(d1[top[x]]<d1[top[y]])swap(x,y);intervallink(1,1,n,idx[top[x]],idx[x],k);x=fa[top[x]];}if(d1[x]>d1[y])swap(x,y);intervallink(1,1,n,idx[x],idx[y],k);
}
int main()
{n=read();m=read();t=m+4*n+1;for(int i=1;i<=n;i++)val[i]=read();for(int i=1;i<n;i++){int u,v;u=read();v=read();ins(u,v);ins(v,u);}cnt=1;d1[1]=1;dfs1(1);dfs2(1,1);build(1,1,n);for(int i=1;i<=m;i++){int a,b,c;a=read();b=read();c=read();add(s,i,c);Treelink(a,b,i);}dinic();printf("%d\n",ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/Jessie-/p/9463494.html

暑假集训8.10-网络流套树剖套线段树相关推荐

  1. 势能线段树/吉司机线段树-我没有脑子

    势能线段树/吉司机线段树 BZOJ3211 花神游历各国 BZOJ5312 冒险 BZOJ4355 Play with sequence BZOJ4695 最假女选手 \(A_i = max(A_i, ...

  2. 【BZOJ-2325】道馆之战 树链剖分 + 线段树

    2325: [ZJOI2011]道馆之战 Time Limit: 40 Sec  Memory Limit: 256 MB Submit: 1153  Solved: 421 [Submit][Sta ...

  3. CodeForces - 160D Edges in MST(思维+tarjan/树链剖分+线段树)

    题目链接:点击查看 题目大意:给出一张 n 个点 m 条边组成的带权无向图,现在对于每条边来说,确定一下其分类: 一定是最小生成树上的边 可能是最小生成树上的边 一定不是最小生成树的边 题目分析:两种 ...

  4. CodeForces - 609E Minimum spanning tree for each edge(最小生成树+树链剖分+线段树/树上倍增)

    题目链接:点击查看 题目大意:给出一张 n 个点和 m 条边组成的无向图,现在询问包含每一条边的最小生成树 题目分析:考虑求解次小生成树的思路: 求出最小生成树 ans 枚举每一条非树边 ( u , ...

  5. 主席树——多棵线段树的集合

    主席树: (不要管名字) 我们有的时候,会遇到很多种情况,对于每一种情况,都需要通过线段树的操作实现. 碰巧的是,相邻两种情况下的线段树的差异不大.(总体的差异次数是O(N)级别的,均摊就是O(常数) ...

  6. P2486 [SDOI2011]染色(树链剖分+线段树)

    题干描述 输入描述 输出格式 对于每个询问操作,输出一行答案. 输入输出样例 输入 #1 复制 6 5 2 2 1 2 1 1 1 2 1 3 2 4 2 5 2 6 Q 3 5 C 2 1 1 Q ...

  7. D-query SPOJ - DQUERY(求区间不同数的个数)(树状数组||线段树+离散)(主席树+在线)

    English Vietnamese Given a sequence of n numbers a1, a2, -, an and a number of d-queries. A d-query ...

  8. BZOJ4127Abs——树链剖分+线段树

    题目描述 给定一棵树,设计数据结构支持以下操作 1 u v d 表示将路径 (u,v) 加d 2 u v 表示询问路径 (u,v) 上点权绝对值的和 输入 第一行两个整数n和m,表示结点个数和操作数 ...

  9. 【BZOJ2243】[SDOI2011]染色 树链剖分+线段树

    [BZOJ2243][SDOI2011]染色 Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的 ...

最新文章

  1. Windows Phone 7的启动器和选择器
  2. html生成缩略图来预览解决方案
  3. 【H.264/AVC视频编解码技术具体解释】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据...
  4. Linux环境安装JDK
  5. 【MM】采购退货的处理办法
  6. Spark _28_窗口函数
  7. html导航教程视频,导航_HTML+CSS前端基础知识教程_腾讯视频
  8. ubuntu 报错E: Unable To Locate Package Software-properties-common
  9. springbatch读取外部数据到mysql
  10. 直播间越播越没人,大部分刚开始做直播电商的人都会这样
  11. linux在电子信息工程行业中的应用,电子信息工程概述论文
  12. 控制台应用程序中Main函数的args参数
  13. C#+OpenGL+FreeType显示3D文字(3) - 用PointSprite绘制文字
  14. pong_计算机视觉与终极Pong AI
  15. .Top域名:新顶级域名还原互联网安全发展
  16. java guice_java – Guice Inject类中的字段不是由Guice创建的
  17. 苏琴与机器人白正_一段知乎的元白
  18. 批量图片格式转化——gif转换为jpg、png
  19. EBS R12.2 ADOP (R12.2 AD Online Patching) - 3
  20. ADS1256的使用

热门文章

  1. angular2初入眼帘之-搭个环境
  2. oracle数据库再深入(四)
  3. 实战ALV OO技术实现添加工具条按钮
  4. 20181023-3 每周例行报告
  5. 深入理解 Spring Boot Starters 原理
  6. DotNet的JSON序列化与反序列化
  7. Linux中命令配置防火墙
  8. 求任意数阶乘最后一位
  9. 在VmWare Workstation 6.5上安装Esx 3.5 U3之二
  10. 使用Vue.js进行数据绑定以及父子组件传值