暑假集训8.10-网络流套树剖套线段树
题目: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-网络流套树剖套线段树相关推荐
- 势能线段树/吉司机线段树-我没有脑子
势能线段树/吉司机线段树 BZOJ3211 花神游历各国 BZOJ5312 冒险 BZOJ4355 Play with sequence BZOJ4695 最假女选手 \(A_i = max(A_i, ...
- 【BZOJ-2325】道馆之战 树链剖分 + 线段树
2325: [ZJOI2011]道馆之战 Time Limit: 40 Sec Memory Limit: 256 MB Submit: 1153 Solved: 421 [Submit][Sta ...
- CodeForces - 160D Edges in MST(思维+tarjan/树链剖分+线段树)
题目链接:点击查看 题目大意:给出一张 n 个点 m 条边组成的带权无向图,现在对于每条边来说,确定一下其分类: 一定是最小生成树上的边 可能是最小生成树上的边 一定不是最小生成树的边 题目分析:两种 ...
- CodeForces - 609E Minimum spanning tree for each edge(最小生成树+树链剖分+线段树/树上倍增)
题目链接:点击查看 题目大意:给出一张 n 个点和 m 条边组成的无向图,现在询问包含每一条边的最小生成树 题目分析:考虑求解次小生成树的思路: 求出最小生成树 ans 枚举每一条非树边 ( u , ...
- 主席树——多棵线段树的集合
主席树: (不要管名字) 我们有的时候,会遇到很多种情况,对于每一种情况,都需要通过线段树的操作实现. 碰巧的是,相邻两种情况下的线段树的差异不大.(总体的差异次数是O(N)级别的,均摊就是O(常数) ...
- 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 ...
- D-query SPOJ - DQUERY(求区间不同数的个数)(树状数组||线段树+离散)(主席树+在线)
English Vietnamese Given a sequence of n numbers a1, a2, -, an and a number of d-queries. A d-query ...
- BZOJ4127Abs——树链剖分+线段树
题目描述 给定一棵树,设计数据结构支持以下操作 1 u v d 表示将路径 (u,v) 加d 2 u v 表示询问路径 (u,v) 上点权绝对值的和 输入 第一行两个整数n和m,表示结点个数和操作数 ...
- 【BZOJ2243】[SDOI2011]染色 树链剖分+线段树
[BZOJ2243][SDOI2011]染色 Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的 ...
最新文章
- Windows Phone 7的启动器和选择器
- html生成缩略图来预览解决方案
- 【H.264/AVC视频编解码技术具体解释】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据...
- Linux环境安装JDK
- 【MM】采购退货的处理办法
- Spark _28_窗口函数
- html导航教程视频,导航_HTML+CSS前端基础知识教程_腾讯视频
- ubuntu 报错E: Unable To Locate Package Software-properties-common
- springbatch读取外部数据到mysql
- 直播间越播越没人,大部分刚开始做直播电商的人都会这样
- linux在电子信息工程行业中的应用,电子信息工程概述论文
- 控制台应用程序中Main函数的args参数
- C#+OpenGL+FreeType显示3D文字(3) - 用PointSprite绘制文字
- pong_计算机视觉与终极Pong AI
- .Top域名:新顶级域名还原互联网安全发展
- java guice_java – Guice Inject类中的字段不是由Guice创建的
- 苏琴与机器人白正_一段知乎的元白
- 批量图片格式转化——gif转换为jpg、png
- EBS R12.2 ADOP (R12.2 AD Online Patching) - 3
- ADS1256的使用