4.16练习周记

本周学习了有向边的强连通分量算法tarjan,应用于有向图环的处理。通过缩点转为有向无环图进行解题。同时,刷了相关例题,如洛谷的模板题和USACO问题。参加了蓝桥杯比赛,意识到缺乏大型比赛经验,需提升思维速度和手速。计划重新整理算法模板,专攻数学和图论。
摘要由CSDN通过智能技术生成

4.16练习周记 + 蓝桥杯总结

首先说下这周应该是我开学来最摆的一周(可能

这周一学习了有向边的强连通分量(tarjan),主要可用于解决有向图存在环的情况,通过缩点操作等,可以转换成DAG(有向无环图)再进行求解(缩点后的新图就是一个逆序拓扑图)。

然后刷了刷相关的例题

P3387 【模板】缩点 - 洛谷 纯板子题,将权值合并到缩点后的点上,然后跑一遍dfs就行

P1262 间谍网络 - 洛谷 对所有可以支付赎金的跑一边tarjan,如果存在没有被遍历过的点就说明不能控制全部间谍,反之就支付每个scc中赎金最小的就行(因为一个scc中都是可以互相到达的)

P2812 校园网络USACO]Network of Schools加强版 和uva那道只有数据上的差别,大致做法就是缩点然后统计入度 p p p和出度 q q q,有两小问,第一问是$p 0 的点数,第二问是 0的点数,第二问是 0的点数,第二问是max(p, q)$

P2272 ZJOI2007 最大半连通子图 - 洛谷 这题感觉更像个阅读理解…(可能OI题都这样), 大致做法也是先缩点,因为scc一定是半连通的,之后我们再建出新图,这里有个小坑点就是会存在重边的情况,所有我们应该先对边去重再建图。建完图之后跑一个最长路然后统计出方案数就可以了

for (int i = scc; i; i --) {
            if (f[i] == 0) {
                f[i] = sz[i];  //权值就是scc中点的数量
                g[i] = 1;
            }
        for (int j = hs[i]; ~j; j = ne[j]) {
            int k = e[j];
            if (f[k] < f[i] + sz[k]) {
                f[k] = f[i] + sz[k];
                g[k] = g[i];
            } else if (f[k] == f[i] + sz[k]) {
                g[k] = (g[k] + g[i]) % mod;
            }
        }
    }

    int res = 0, sum = 0;  //结点数和子图数量也就是方案数
    for (int i = 1; i <= scc; i ++) {
        if (res < f[i]) {
            res = f[i];
            sum = g[i];
        } else if (res == f[i]) {
            sum = (sum + g[i]) % mod;
        }
    }

这周还学了双连通分量,但还没做题,等下周再刷了, 这周也做了寄到两千分的CF题,总体感受是没题解就是一点也做不了,看题解就像在做阅读理解。

目前我的打算是两天开一场div2,尽量训练自己的思维速度和手速,争取能一小时内出4题,然后把赛后把EF补完

我的思维还是差了好多,需要多刷点新题多见识见识,而且模板时间长了不用就会忘,应该尽量复习下。

等到五月份我打算把学过的算法模板再系统整理一遍,然后专精数学和图论这方面。


蓝桥杯这次打的感觉不是很好,总体来说还是缺少点大型比赛的经验,刚开始开题开不出来就慌了,中间就对着死扣一道题,快结束了的时候才开始打暴力骗分。其实总的来说这次题真不难,除了最后一题的Dsu on Tree可能做不出来之外,其他题完全有能力做的。。。

打完一直也没补,可能等哪天想起来了再去补。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值