题目整理

1、https://vjudge.net/contest/327737#problem/I 最小费用最大流+迪杰斯特拉优化

给出一组数,找到k个不下降子序列(没要求长度),且每一个点只能选择一次,求这些序列和值的最大值。

思路:

将源点S拆为入点S0和出点S1,S0->S1的流量为K,费用为0,保证只拿K次。

对于点Ai,拆分成Ai0和Ai1,入点向出点连一条流量为1的边,保证只选一次这个点,费用为-Ai。

然后枚举i后面的点j,若j点值>=i点值,则Ai1->Aj0连一条边,费用为0,流量为1.

最后,将S1与Ai0连一条流量为1并且费用为0的边,将Ai1->T连一条流量为1并且费用为0的边。

从S0->T跑一遍最小费用最大流。

网络流24题中有一道题,换了一下问法,问 给出一组数,问有多少个长度为k的不下降子序列,且每一个点只能选择一次。这就是最大流的问题了。这一周把网络流24题看完。

思路,先求出以i点开始的fi,代表以i开始的最长不下降子序列。

建图,把每一个点拆分成两个点 Ai1 Ai2 ,连一条容量为1的边(边的容量代表了数的使用次数)。

对于Ai点,若其Fi为1,那么源点S->Ai1,容量为1.若为K,那么Ai2->T,容量为1。分层图思想,按fi分层,S->T的路径都是合法的。

对于j>i且Fj+1=Fi、Aj>=Ai,连一条Ai2->Aj1,容量为1的边。

求S->T的最大流。

若修改为A1 AN可以用无数次,那么取消这两个点相关边的容量限制,然后跑最大流。即

A11->A12=INF

AN1->AN2=INF

S->A11=INF

AN2->T=INF

https://www.luogu.org/blog/zcysky/solution-p2766 

2、http://codeforces.com/problemset/problem/237/E

给出S串和n个T串,问从第i个串中拿出一个字符的代价为i,且最多拿numi个,求能否构成S,最小费用。

建图方式如下

3、https://codeforces.com/problemset/problem/231/E

给出一个仙人掌无向图,问a-b的简单路径有多少。

就是a-b所经过的简单环cnt相关的答案 2^{cnt}  。

先缩点,把环缩成点,形成一个树,从头对新点进行标号,进行建立一个树。

for(u=1; u<=n; u++)
    {
        for(int i=0; i<G[u].size(); i++)
        {
            int v=G[u][i];
            if(fa[u]!=fa[v])
                tree[fa[u]].push_back(fa[v]);//建一颗树
        }
    }

然后进行dfs,遍历这棵树,求出dist数组,含义为i点到根点经过的环的个数。

然后进行求lca(类似于求lca的思想),u,v两点之间的环数为dist[u]+dist[v]-2*dist[lca]+tot[lca]>1

4、https://codeforces.com/problemset/problem/711/D

给出有向图,i->fi为边的方向,问有多少种反转边方向的方法,使得无环。

对于环来说,其中的点有cnt,那么答案为,对于所有不在环中的点x,有种,,答案乘起来即可。

可以dfs找环,每次记录环中点的数目。

也可以用tarjan找,判断缩点后的点。

5、https://blog.csdn.net/mengxiang000000/article/details/53026275

给出起点标号,问最多能到达的点的个数。

缩点之后求最长路。

感觉这部分的题很老了啊... 

6、http://acm.fzu.edu.cn/problem.php?pid=1719

有些特殊人可以某种途径通知到,然后通知具有传递性,A->B B->C 那么A->C ,然后给出这些特殊人的标号和费用。

问能不能用最小的费用使得人全部被通知到,不能的话输出度为0的节点中编号最小的顶点编号。

分析:

先利用强连通缩点,成了一个新的图,求图中入度为0的节点,然后若特殊人不再此新点内,那么输出NO。

若所有缩点都符合,那么求出每一个缩点中的最小值。

答案累加。

强连通分量这部分的题感觉好老啊

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值