摘要: /**State: ZOJ2588 530 MS 12788 KB GNU C++*题目大意:* 给出一个无向图,输入n(表示n个定点,1~n), m(m条边,有重边),* (2 <= N <= 10 000, 1 <= M <= 100 000),求这个无向图中的桥,* 并输出桥属于输入中边的id.*解题思路:* 知道求割点与求割边是很相似的,自己用笔模拟一下就知道,如果* 存在low[v] > dfn[u].那么uv就是割边。看似与割点异常类似,但是* 用了原始的求割点的tarjan敲了几遍后发... 阅读全文
posted @ 2012-08-18 09:31 cchun 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 一道好题啊,加深了我对lca的理解。/**State: POJ3694 Accepted 6924K 407MS C++ 2466B*题目大意:* 给一个无向图,该图只有一个连通分量。然后查询q次,q < 1000,* 求每次查询就增加一条边,求剩余桥的个数。*解题思路:* 求出搜索树的时间戳dfn,发现两点的lca的时间戳大于左子树,小于右子树。* 之后可以通过合并连通分量的方式来计算剩余的桥的个数。合并连通分量的* 方法,发现用并查集来合并,要方便得多啊,很容易合并掉两个大块。所以* ... 阅读全文
posted @ 2012-08-18 09:30 cchun 阅读(1721) 评论(0) 推荐(0) 编辑
摘要: /**State: POJ3177 Accepted 340K 16MS C++ 1877B*题目大意:* 给出一个无向连通图,判断最少需要加多少条边,才能使得* 任意两点之间至少有两条相互"边独立"的道路.注意,可能* 含有重边.*解题思路:* 先缩点,之后形成一棵树,然后求(叶子节点数量+1)/ 2即可。*/View Code #include <iostream>#include <vector>#include <stack>using namespace std;const int MAXN = 5... 阅读全文
posted @ 2012-08-18 09:28 cchun 阅读(254) 评论(0) 推荐(0) 编辑
摘要: /**State: HDU3072 328MS 2648K 2039 B C++ *题目大意:* 有一个含边权有向图,然后有向图中的强连通分量里面通信不需要* 权值,要求从0点开始向所有的点通信,然后求最后总权值最小。*解题思路:* 看到强连通分量不需要权值即可通信,就想到缩点。缩点之后就是一个* DAG,然后这个DAG里面的除了起始点0之外,所有点都要走一次,那么* 想清楚了其实就是每一个点有多条入度边,只需要找其中权值最小的* 一条入度边即可,然后实现这个过程可以在缩点的过程中实现。*解题感想;* ... 阅读全文
posted @ 2012-08-18 09:26 cchun 阅读(123) 评论(0) 推荐(0) 编辑
摘要: /**题目大意:* 在数学里面有两种关系,一种是充分条件,即对于集合p,q,p => q,* 另一种是等价关系,p => q && q =>p, 这两种关系都具有传递性,p* => q 可以对应到有节点p到节点q有一条边。问:给定一些集合的充分* 性关系,确定出若让所有集合都等价,还需在添加最少的充分性条件。*解题思路:* 有向图加最少边变强连通,模板题*/View Code #include <iostream>#include <cstdio>#include <cstring>using namespace st 阅读全文
posted @ 2012-08-18 09:25 cchun 阅读(373) 评论(0) 推荐(0) 编辑
摘要: /**State: POJ2375 26396K 938MS C++ 2743B 险过:limit:1000ms*题目大意:* FR为自己的牛建立了一个H*W的矩形溜冰场,每一个小方格都* 有一个高度L,牛只能向相邻的小方格滑动(即上下左右),* 而且相邻的小方格的高度不能比当前高度高。为了使牛能够从* 任意一点到达任意其他的点。FR打算买一些ski lifts。它能够* 连接两个小方格,使得这两个小方格能够相互到达(与高度无* 关)。问至少需要多少ski lifts。使得牛能够从任意一点到达... 阅读全文
posted @ 2012-08-18 09:24 cchun 阅读(496) 评论(0) 推荐(0) 编辑
摘要: 我用了Bellman_ford判断正权圈,还可以用floyd,够酷。/**题目大意:* 有n种货币,而且每两种之间有汇率,如果a->b,b->c,c->a,然后他们之间的* 所有汇率乘积大于1,那么就是一种获得利润的手段,题目要求输出yes.*解题思路:* 其实画图就知道,题目要的就是找到存在一个圈,并且这个圈所有权值的乘积* 是正的,如果把最长路的关系条件由加法改为乘法,那么就是说找一个所有乘* 积为的环。dij,floyd可以办到吗?显然不行,他们都处理不了带环的。这个时候* spfa跟Bellman_fo... 阅读全文
posted @ 2012-08-18 09:21 cchun 阅读(202) 评论(0) 推荐(0) 编辑
摘要: /**State: 2394 Accepted 724K 16MS G++ 1789B *题目大意:* 给定无向图,输入的c代表c个奶牛,然后输入c个点的位置,* 求能够在t时间内到达点1的牛。*解题思路:* 直接spfa吧。*/View Code #include <iostream>#include <queue>using namespace std;const int MAXN = 505;const int MAXE = 1024;const int inf = 0x3f3f3f3f;typedef str... 阅读全文
posted @ 2012-08-18 09:21 cchun 阅读(249) 评论(0) 推荐(0) 编辑
摘要: /**State: POJ3268 Accepted 3324K 16MS C++ 1947B*题目大意:* 给定一个有向图(可带环),然后要求所有点到特定点e的距离,然后规定每个* 点到e之后,还要返回原地,注意图是有向图,去跟回来的路径可能不同。*解题思路:* 为了减少运算时间,可以建立正图跟反图,然后两遍spfa即可求解。* 各种最短路均可求,注意复杂度即可。*/spfa+邻接表:View Code #include <iostream>#include <queue>using namespace std... 阅读全文
posted @ 2012-08-18 09:16 cchun 阅读(694) 评论(0) 推荐(0) 编辑