没听清楚出处的题

T1(好像是TCO 500分题)

题意:给你个DAG,要你选择一个拓扑序使得最大子段和最大,n<=50


题解:一个拓扑序可以分成三部分,假设把这三部分的点标一个标号(0/1/2),即000001111122222


如果a->b有边,那么val[a]<=val[b]。于是可以转化为切糕模型,拿网络流来做...

S->i(0),i+n->T(0),i->i+n(-val[i])

a[i]->b[i](inf),a[i]+n->b[i]+n(inf)


跑dinic就好了...


T2

题意:给你个DAG,每个点要硬点一个0/1权值,选0/1有个贡献,对于每条边a[i]->b[i],a[i]选0,b[i]选1有个贡献;a[i]选1,b[i]选0有个贡献.问怎么选贡献最大,n<=50


题解:假设在拓扑序上把0/1标出来,那么一段相连的0或1就可以缩成一个点.把这些点重新标号,比如10101010就标号成12345678.

于是可以转成切糕模型,同样对每个点设个权值val,那么val[a]<=val[b].


对于val[i],若val[i]为偶数就说明选了0,否则就是选了1


建一建图跑dinic就好了...


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值