tarjan
EMber _
人但有追求,世界亦会让路。
展开
-
bzoj[Usaco2008 Dec]Trick or Treat on the Farm 采集糖果 tarjan
一开始sb了,直接缩点乱搞就好。。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;const int原创 2017-05-24 21:46:06 · 265 阅读 · 0 评论 -
bzoj1718[Usaco2006 Jan] Redundant Paths 分离的路径 边双连通分量
这题想到一半了,最后缩点以后的统计答案挂了= =。。。 题意就不说了,问你加入多少条边能使得所有边都是一个边双。 n有点小了,怀疑有n^2水法。 求出边双以后缩点比较显然,然后我就有点蒙逼了,不知道怎么统计答案。。 想了dp和二分等奇怪姿势,然而好像都没用。 后来看了一波题解才发现是结论= =一棵树,要让他任意两点之间有超过1条路径相连,答案是(叶子节点个数+1)/2。 为啥呢?因为,一原创 2017-06-17 09:50:33 · 605 阅读 · 0 评论 -
bzoj3887 [Usaco2015 Jan]Grass Cownoisseur tarjan+拓补排序
题意不说了。 %%%popoqqq 既然没有要求一条边不能被经过两次,那么在强连通分量内的所有点都有贡献,所以先缩点,这个挺显然的。 问题是这个逆边要怎么选,,有一个明显结论 将某条边反向后 缩点之后的图形成了一个包含1号节点所在强连通分量的环 这样才能使答案增加 把这个环从反向的边和1号节点所在的强连通分量断开,一条路是从1到n,另外一条是从n到1. 那么我们缩点以后拓补排序一下,把正原创 2017-07-19 10:38:06 · 690 阅读 · 0 评论 -
codeforces 427C tarjan
题意自不用说,很简单。 tarjan裸题了吧,一开始写了个重构,然后发现很长而且挺难调,想了想直接tarjan找scc的时候顺便统计一下就好,不然重构好像会出事,不过应该是我写错了。 写题的时候哪怕是很简单的题目也要想想怎么写更加短更好调试。#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(i原创 2017-09-25 22:33:03 · 242 阅读 · 0 评论 -
bzoj2730 [HNOI2012]矿场搭建 tarjan 点双连通分量
题意:一个无向非连通图,要求每个点的矿工都能走到救援口,可能会把任意一个点ban掉,要求最少的救援口,使得每一个点都能走到救援口,以及最少救援口的方案数。首先很明显,如果ban掉的点不是割点没影响。 所以一个很明显的结论就是我们每一个块内设一个救援口,那么第一个问题的答案就是块的个数。 还有特例就是,如果一个块链接两个割点,那我ban掉一个以后还有另外一个,所以这种情况下,这个块内不用设立新的点原创 2017-10-18 21:15:54 · 465 阅读 · 0 评论 -
bzoj1093[ZJOI2007]最大半连通子图 tarjan+拓补排序
这是一个看懂题目就能切的题。 题意:给你个图,求最长路。 怎么样,是不是被震惊到了。。。其实就这么简单。。 由于原图可能有scc,我们需要tarjan处理掉,然后就是最长路了,由于并不固定起点,我们拓补排序的同时去更新最长路,也可说是DP吧,记录一下到达每个点的方法数,这个也很好记录。 1A,爽。#include<cstdio>#include<algorithm>#include<cs原创 2017-10-27 08:23:25 · 244 阅读 · 0 评论 -
bzoj1179: [Apio2009]Atm tarjan+spfa
题意:一个有向图求从s出发,到某一些规定点的最长路径。 一开始不化模型然后直接无脑dfs,这就是不把最短路当最短路,煞笔一个我,样例都过不去才发现问题。 然后简化了一下题意。。这不就裸的么。没什么好说的。#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define fo(i,a,b) for(int原创 2017-10-25 17:15:07 · 512 阅读 · 0 评论