BZOJ3118 : Orz the MST
对于树边显然只需要减少权值,对于非树边显然只需要增加权值
设i不为树边,j为树边
X[i]:i增加量
X[j]:j减少量
C[i]:修改1单位i的代价
对于每条非树边i(u,v),在树上u到v路径上的所有边j都需要满足
即
最后我们要最小化
将矩阵转置,得到对偶问题,用线性规划单纯形法求解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include<cstdio> #define rep(i,l,n) for(int i=l;i<=n;i++) const int N=1001,M=4000,inf=~0U>>2; int n,m,a[N][M],nxt[M],s,t,c,nn; int g[N],Nxt[N],v[N],ed,pre[N],id[N][N],head,tail,q[N]; inline void cal( int l, int e){ a[l][e]=-1;t=M-1; rep(i,0,m) if (a[l][i])nxt[t]=i,t=i;nxt[t]=-1; rep(i,0,n) if (i!=l&&(t=a[i][e])){ a[i][e]=0; for ( int j=nxt[M-1];~j;j=nxt[j])a[i][j]+=a[l][j]*t; } } int work(){ for (;;){ int min=inf,l=0,e=0; rep(i,1,m) if (a[0][i]>0){e=i; break ;} if (!e) return a[0][0]; rep(i,1,n) if (a[i][e]<0&&a[i][0]<min)min=a[i][0],l=i; cal(l,e); } } struct Edge{ int u,v,w,f,a,b,c;}E[N]; inline void add( int x, int y, int z){v[++ed]=y;id[x][y]=z;Nxt[ed]=g[x];g[x]=ed;} inline void bfs( int X, int y, int z){ int i,x; for (i=1;i<=nn;i++)pre[i]=0; q[head=tail=0]=X; while (head<=tail) for (i=g[x=q[head++]];i;i=Nxt[i]) if (!pre[v[i]]&&v[i]!=X)pre[q[++tail]=v[i]]=x; for (;pre[y];y=pre[y]){ ++m; i=id[y][pre[y]]; a[z][m]=a[i][m]=-1; a[0][m]=E[i].w-E[z].w; } } int main(){ scanf ( "%d%d" ,&nn,&n); rep(i,1,n){ scanf ( "%d%d%d%d%d%d" ,&E[i].u,&E[i].v,&E[i].w,&E[i].f,&E[i].a,&E[i].b); E[i].c=E[i].f?E[i].b:E[i].a; if (E[i].f)add(E[i].u,E[i].v,i),add(E[i].v,E[i].u,i); } rep(i,1,n) if (!E[i].f)bfs(E[i].u,E[i].v,i); rep(i,1,n)a[i][0]=E[i].c; return printf ( "%d" ,work()),0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
· 重磅发布!DeepSeek 微调秘籍揭秘,一键解锁升级版全家桶,AI 玩家必备神器!