BZOJ3876: [Ahoi2014]支线剧情
有下界最小费用可行流。建图可以优化,我没优化。
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #include<algorithm> #include<cstdio> #include<cstring> using std::min; const int inf=1061109567; const int N=305; const int s=N-1; const int t=N-2; int n,z[N],q[N*N],c[N],d[N]; struct edge{ int v,w,f;edge*s; }e[N*N]; edge*a=e,*h[N]; void ins( int u, int v, int w, int f){ edge s={v,w,f,h[u]}; edge t={u,-w,0,h[v]}; *(h[u]=a++)=s; *(h[v]=a++)=t; } bool spfa(){ memset (c,63, sizeof c); memset (d,0, sizeof d); c[q[0]=t]=0; for ( int a=0,b=0;a<=b;++a){ int u=q[a]; z[u]=0; for (edge*i=h[u];i;i=i->s) if (e[i-e^1].f&&c[u]-i->w<c[i->v]){ c[i->v]=c[u]-i->w; d[i->v]=d[u]+1; if (!z[i->v]++) q[++b]=i->v; } } return c[s]!=inf; } int dfs( int u, int v){ if (u==t) return v; int s=v; for (edge*i=h[u];i;i=i->s) if (c[i->v]==c[u]-i->w&&d[i->v]==d[u]-1&&i->f){ int j=dfs(i->v,min(i->f,s)); i->f-=j,s-=j; e[i-e^1].f+=j; if (!s) break ; } if (s==v)c[u]=inf; return v-s; } int main(){ scanf ( "%d" ,&n); for ( int i=1;i<=n;++i){ int j,v,w; scanf ( "%d" ,&j); ins(i,t,0,j); ins(i,1,0,inf); while (j--){ scanf ( "%d%d" ,&v,&w); ins(s,v,w,1); ins(i,v,w,inf); } } int k=0; while (spfa()) while ( int j=dfs(s,inf)) k+=j*c[s]; printf ( "%d\n" ,k); } |
【推荐】编程新体验,更懂你的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 玩家必备神器!