我们可以看出这个东西可以缩点成DAG,因为我们在所称的点里用特技的话,要么没用,要么削弱自己对点的收割能力与边的联通权,所以我们缩完点之后在图上枚举反向的变,因为我们只可能反向一条边,而且我们知道在这条边上走的方向,那么我们一定是在边终点回去,在边起点来,因为一来一回的这两条路径一定没有交叉所以我们找着两条路径的最大值,我们跑两边SPFA就好了,(一边正向,一边反向). 注意在无向图Tarjan时要穷举,因为一个点可能走不完. #include<cstdio> #include<cstr…
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #define maxn 200002 using namespace std; queue<int>Q; stack<int>S; vector<int>G[maxn],V[maxn]; map<int,int>mp[maxn]; int n,m,edges,…
考试的时候忘了缩点,人为dfs模拟缩点,没想到竟然跑了30分,RB爆发... 边是可以重复走的,所以在同一个强连通分量里,无论从那个点进入从哪个点出,所有的点一定能被一条路走到. 要使用缩点. 然后我们枚举每一条边,考虑如果将这条边反置的话,就是这条边的终点到1的点的权值(正向的)加上起点到1的点的权值(反向的):例:→→←→→ 每个点到1的正向反向距离可以用两遍SPFA解决出来. 先使用tarjan缩点,记录每个点的权值,缩点后权值变为强连通分量中点的个数.缩完点之后重新建图,正向边存1,反向…
题目: 给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过?(一个点在路径中无论出现多少正整数次对答案的贡献均为1) 题解: 首先考虑简单一些的问题 如果没有逆向的机会,那么\(ans\)即为\(1\)所在的强连通分量的大小. 但是现在有一个逆向的机会 如果我们将缩点后的\(DAG\)搞出来的话就可以发现: 一定是从\(1\)的连通块出发走到别的地方然后通过走逆向边返回一个可以到达\(1\)的路径上. 那么我们可以预处理每个点到根的最…
BZOJ3887 [Usaco2015 Jan] Grass Cownoisseur Description In an effort to better manage the grazing patterns of his cows, Farmer John has installed one-way cow paths all over his farm. The farm consists of N fields, conveniently numbered 1..N, with each…
草鉴定Grass Cownoisseur 题目链接 约翰有n块草场,编号1到n,这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可能多的草场去品尝牧草. 贝西总是从1号草场出发,最后回到1号草场.她想经过尽可能多的草场,贝西在通一个草场只吃一次草,所以一个草场可以经过多次.因为草场是单行道连接,这给贝西的品鉴工作带来了很大的不便,贝西想偷偷逆向行走一次,但最多只能有一次逆行.问,贝西最多能吃到多少个草场的牧草. 如果没有逆行操作和回到1的限制,我们很容易想到一种方法: Tarj…
题面:洛谷P3119 Grass Cownoisseur G 本人最近在熟悉Tarjan的题,刷了几道蓝题后,我飘了 趾高气扬地点开这道紫题,我一瞅: 哎呦!这不是分层图吗? 突然就更飘了~~~ 用时20min写了一个分层图+bfs上去,却看到了一片红...... 我:???? 苦(查)思(看)冥(题)想(解)后,我恍然大悟 我好像忘了比较大小了(→_→) 改了改,提交上去,果然A了~~~ 下面进入正题: 大约的问题就是:已知有n个点,m条有向边,问从1点出发,最后回到1点,可以逆行一次,最多能…
Python 的 asyncio 类似于 C++ 的 Boost.Asio. 所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. Asyncio 是并发(concurrency)的一种方式.对 Python 来说,并发还可以通过线程(threading)和多进程(multiprocessing)来实现. Asyncio 并不能带来真正的并行(parallelism).当然,因为 GIL(全局解释器锁)的存在,Python 的多线程也不…
"""# [[面向对象]]#[访问限制]#如果要让内部属性不被外部访问,可加双下划线,编程私有变量.只有内部可以访问,外部不能访问.class Student(object): def __init__(self,name,score): self.__name = name self.__score = score def print_score(self): print("%s : %s " % (self.__name,self.__score))b…
# [Ruby 块]=begin1 块由大量代码构成2 块中代码包含在{}内3 从与其相同名称的函数调用4 可以使用yield语句调用块=enddef test p '在test方法内' yield p '又回到了test方法内' yieldend test {p '你在块内'}#也可以传递由参数的yielddef test yield 5 p '在方法内' yield 100endtest {|i| p "你在块#{i}内"} # 传递多个参数def test yield 5,100…