P5039 [SHOI2010]最小生成树(网络流)

解析

我大受震撼。
真的没想到是网络流。(事后诸葛:看几百的数据范围应该试试枚举算法)
一道比较开眼界的题吧。
然而用一个十分钟写完的假做法可以骗90分,还是挺香的

首先是一个没什么意思的转化:操作等价于给一条边权值加一。
设特殊边为 (u,v,w)(u,v,w)(u,v,w),想想什么时候这条边会可能不在最小生成树上。
不难发现,如果最终这条边不在生成树上,那么树上 (u,v)(u,v)(u,v) 路径的所有边必然权值都不大于 www
所以存在一条从 u 到 v ,路上权值均不大于 w 的路径是不符合要求的必要条件。
然后不难发现如果存在,也一定可以构造出不含要求边的生成树,所以它就充要了。
那么题意就变成了通过若干次加权,使得整张图不存在一条从 u 到 v ,路上权值均不大于 w 的路径。
可以用最小割解决。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
using namespace std;const int N=1550;
const int inf=1e9;
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)) {if(c=='-')f=-1;c=getchar();}while(isdigit(c)) {x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}int n,m,id;int s,t,tot;
struct node{int to,nxt,cap;
}p[N<<1];
int fi[N],cur[N],cnt;
inline void Addline(int x,int y,int cap){p[++cnt]=(node){y,fi[x],cap};fi[x]=cnt;
}
inline void add(int x,int y,int c){Addline(x,y,c);Addline(y,x,0);
}
int bel[N];
int q[N],st,ed;
int bfs(){memset(bel,0,sizeof(int)*(tot+1));bel[s]=1;q[st=ed=1]=s;while(st<=ed){int now=q[st++];for(int i=cur[now]=fi[now];~i;i=p[i].nxt){int to=p[i].to;if(!p[i].cap||bel[to]) continue;bel[to]=bel[now]+1;q[++ed]=to;}}return bel[t];
}
int dfs(int x,int lim){if(x==t||!lim) return lim;int res(0);for(int &i=cur[x];~i;i=p[i].nxt){int to=p[i].to;if(bel[to]!=bel[x]+1) continue;int add=dfs(to,min(lim,p[i].cap));res+=add;lim-=add;p[i].cap-=add;p[i^1].cap+=add;if(!lim) break;}if(!res) bel[x]=-1;return res;
}
int dinic(){int flow(0),tmp(0);while(bfs()){while((tmp=dfs(s,inf))) flow+=tmp;}return flow;
}int u[N],v[N],w[N],val;
signed main(){#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);#endifn=read();m=read();int id=read();tot=n;memset(fi,-1,sizeof(fi));cnt=-1;for(int i=1;i<=m;i++){u[i]=read(),v[i]=read();w[i]=read();if(id==i){val=w[i];s=u[i];t=v[i];}}for(int i=1;i<=m;i++){if(i==id) continue;int f=val-w[i]+1;if(f>0){add(u[i],v[i],f);add(v[i],u[i],f);}}printf("%d\n",dinic());return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Abp vNext 切换MySql数据库

Abp vNext是Abp的下一代版本&#xff0c;目前还在经一步完善&#xff0c;代码已经全部重写了&#xff0c;好的东西保留了下来&#xff0c;去除了很多笨重的东西&#xff0c;从官宣来看&#xff0c;Abp vNext主要是为了以后微服务架构而诞生的。从源码来看&#xff0c;Abp vNext…

P1199 [NOIP2010 普及组] 三国游戏

P1199 [NOIP2010 普及组] 三国游戏 题意&#xff1a; 有n个武将&#xff0c;每两个武将之间都有默契值&#xff0c;你和电脑玩游戏&#xff0c;轮流选一个。轮到计算机挑选时&#xff0c;它会尝试将对手军队中的每个武将与当前每个自由武将进行一一配对&#xff0c;找出所有配…

P1791 [国家集训队]人员雇佣(网络流)

解析 熟练和固化在有些时候是等价的。 一个看起来喜闻乐见的模型。 n2n^2n2 信息量你在逗我… 结果是&#xff1a;点数 n2n^2n2 TLE&#xff0c;边数 n2n^2n2 AC。 一种之前所没有见过的打开方式。 还是考虑最小割模型&#xff0c;点 iii 向原点连一条 AiA_iAi​ 的边&#xf…

【网络流专练一】UVA五题(UVA12125,UVA11082,UVA10983,UVA1306,UVA10735)

网络流专练March of the Penguins矩阵解压 Matrix DecompressingBuy one, get the rest freeThe K-League混合图的欧拉回路 Euler Circuit什么破网站&#xff0c;多余空格换行都不能有&#xff0c;还nm不报PE/RE只报WA。 少一行换行也不行&#xff0c;这是什么垃圾文本比较。 …

采用.NET CORE的全异步模式打造一款免费的内网穿透工具--NSmartProxy

什么是NSmartProxy&#xff1f;NSmartProxy是一款免费的内网穿透工具。特点跨平台&#xff0c;客户端和服务端均可运行在MacOS&#xff0c;Linux&#xff0c;Windows系统上&#xff1b;使用方便&#xff0c;配置简单&#xff1b;多端映射&#xff0c;一个NSmart Proxy客户端可以…

Acwing 236. 格鲁吉亚和鲍勃(博弈论妙题)

Acwing 236. 格鲁吉亚和鲍勃 题意&#xff1a; 一排网格&#xff0c;将网格从左到右依次编号 1,2,3&#xff0c;…&#xff0c;并将 N 个西洋棋棋子放在不同的网格上&#xff0c;如下图所示&#xff1a; 两个人轮流移动棋子 每次玩家选择一个棋子&#xff0c;并将其向左移动…

.NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯

1&#xff0c;前言开发环境&#xff1a;在 Visual Studio 2017&#xff0c;.NET Core 2.x串口通讯用于设备之间&#xff0c;传递数据&#xff0c;物联网设备中广泛使用串口方式连接通讯&#xff0c;物联网通讯协议 &#xff1a;Modbus 协议 ASCII、RTU、TCP模式是应用层的协议&…

洛谷P1173:[NOI2016] 网格(tarjan、离散化)

解析 看起来很不码农但写起来其实还行的一道题。 主要也是因为我贺题解把所有的雷都避过去了 首先一个比较显然的结论是&#xff1a;通过堵角上的&#xff0c;答案不超过2。 所以本题只要把答案是-1&#xff0c;0&#xff0c;1&#xff0c;2的情况判出来即可。 -1是只有一个…

【无码专区5】01串(大讨论+构造)

因为只有std&#xff0c;没有自我实现&#xff0c;所以是无码专区 主要是为了训练思维能力 solution才是dls正解&#xff0c;但是因为只有潦草几句&#xff0c;所以大部分会有我自己基于正解上面的算法实现过程&#xff0c;可能选择的算法跟std中dls的实现不太一样。 std可能…

Game of Cards Gym - 102822G

Game of Cards Gym - 102822G 题意&#xff1a; 小兔子和小马喜欢玩奇怪的纸牌游戏。现在&#xff0c;他们正在玩一种叫做0123游戏的纸牌游戏。桌子上有几张牌。其中c0标记为0&#xff0c;c1标记为1&#xff0c;c2标记为2&#xff0c;c3标记为3。小兔子和小马轮流玩游戏&…

开源组件ExcelReport 3.x.x 使用手册(为.netcore而来

ExcelReport转眼已经开源4年了&#xff0c;期间有很长时间也停止了对它的维护。18年年末有人联系到我&#xff0c;说“兄弟&#xff0c;ExcelReport不错&#xff0c;但什么时候支持.netcore呢&#xff1f;”。我寥寥的回了几句搪塞的话&#xff0c;也没当回事。后来这兄弟又来问…

洛谷P4007:小 Y 和恐怖的奴隶主(期望、矩阵快速幂)

解析 不难发现有效的状态只有 SC113165SC_{11}^3165SC113​165 种。 同时&#xff0c;能支持 n1018n10^{18}n1018 的算法也不剩啥了&#xff0c;要么拉插&#xff0c;要么矩乘。 本题当然就是矩乘了&#xff0c;转移矩阵也较为显然。 然而&#xff0c;直接做的话复杂度是 O(T…

集合均值(逆元+数学)

problem 题目描述 有两个可重集合 nnn&#xff0c;初始时 mmm 只包含一个 000&#xff0c;是给定的。 执行以下操作&#xff1a; 在 BBB 中随机选一个数 yyy&#xff0c;把 yyy 从 BBB 移动到 AAA。给答案加上 AAA 的平均值。若 BBB 非空&#xff0c;回到步骤 111。 求最后答…

《.NET Core 和前后端那些事儿》技术交流活动纪实

长沙.NET技术社区.NET Core和前后端那些事儿技术交流纪实2019年3月10日&#xff0c;下午&#xff0c;在位于沁园春御院的长沙市互联网活动基地&#xff0c;在长沙市.NET技术社区的组织下&#xff0c;长沙市.NET技术圈第一次纯粹的技术沙龙在这里召开。这次活动总共参加人数超过…

CF 1529C Parsa‘s Humongous Tree

CF 1529C Parsa’s Humongous Tree 题意&#xff1a; 给你一颗n个点&#xff0c;n-1个边的树&#xff0c;每个点的点权为一个区间值&#xff0c;树的值为边权和。 边权为该边的两个端点的点权差的绝对值的和 问树的值最大是多少&#xff1f; 题解&#xff1a; 这个题给的点…

聚烷撑乙二醇(数学+期望)

problem 有 nnn 个随机数生成器&#xff0c;第 iii 个生成器可以均匀随机地生成 [Li,Ri][L_i,R_i][Li​,Ri​] 内的一个实数。 现在你要玩个游戏&#xff0c;从第 111 个生成器到第 nnn 个生成器&#xff0c;每次当前生成器会生成一个数&#xff0c;你需要选择&#xff1a; …

AT2293 [AGC009D] Uninity(贪心、状压)

解析 题意描述令人一脸懵逼… 看了一下样例再回去看那个uninity的定义才大概明白&#xff0c;题目所求的其实就是按照给出树构造的点分树的最大深度的最小值。 然后…就不会辣qwq 一开始的方向就错了&#xff0c;尝试通过确定分治重心来考虑&#xff0c;还真发现了一些挺有意…

10个小技巧助您写出高性能的ASP.NET Core代码

今天这篇文章我们来聊一聊如何提升并优化ASP.NET Core应用程序的性能&#xff0c;本文的大部分内容来自翻译&#xff0c;当然中间穿插着自己的理解&#xff0c;希望对大家有所帮助&#xff01;话不多说开始今天的主题吧&#xff01;我们都知道性能是公共网站取得成功的关键因素…

技术情报局(笛卡尔树)

problem 有这样一道简单题&#xff1a;给定一个序列求所有区间的最大值的和。 还有这样一道简单题&#xff1a;给定一个序列求所有区间的乘积的和。 众所周知&#xff1a;简单题 简单题 简单题。 所以&#xff0c;给定一个长为 nnn 的正整数序列&#xff0c;定义一个区间…

CF 1529D Kavi on Pairing Duty

CF 1529D Kavi on Pairing Duty 题意&#xff1a; 有2 * n个点&#xff0c;现在要求两个点连成线段&#xff0c;每个连法都可以得到n个线段&#xff0c;合法的连接方式为&#xff1a;连接的n个线段&#xff0c;任意两个线段要么长度相等&#xff0c;要么有包含关系 n<1e6 …