先来复习一下混合图欧拉回路:给定一张含有单向边和双向边的图,使得每一点的入度出度相同。首先对于有向边来说,它能贡献的入度出度是确定的,我们不予考虑。对于无向图,它可以通过改变方向来改变两端点的出入度。好的,我们不妨先将这些无向边随意定向,因为欧拉回路要求每点入度 = 出度,也就是总度数为偶数,存在奇...
分类:
其他好文 时间:
2015-06-02 17:09:01
阅读次数:
84
拓扑排序的定义 简单来说就是给你一个图写出一个序列 图中如果a通向b 那么序列中A必须排在B前面
拓扑排序可能有很多结果 必须是有向无环图 可以利用拓扑排序来判定环的存在 当然也可以用神奇的SPFA 但是拓扑排序时间复杂度很低 只有O(V+E)
基本实现思路是 每次取出入度为0的点 然后删除与它相连的边 直到没有边 如果还有边但是找不到入度为0的点 说明有环
学习这个算法联系了两道题目 很...
分类:
编程语言 时间:
2015-05-25 10:09:44
阅读次数:
199
对于有向图和无向图的欧拉回路判定,很容易做到.那对于混合图呢?? 混合图就是图中既存在无向边又存在有向边的图. 至于解法: 转载自这里 把该图的无向边随便定向,计算每个点的入度和出度。如果有某个点出入度之差为奇数,那么肯定不存在欧拉回路。因为欧拉回路要求每点入度 = 出度,也就是总度数为偶...
分类:
其他好文 时间:
2015-05-12 00:01:03
阅读次数:
293
题意:有n个学校,学校之间可以传递信息,为单向传递。
问题一:至少要向几个学校传递原始信息,才能保证所有学校都能收到信息。
问题二:至少要添加多少组关系(每组关系类型如右:a 可以 向 b 传递信息),才能保证 给任意一个学校原始信息后,其他所有学校都能收到信息。
思路:这道题其实就是一个有n个顶点的有向图,先用 Tarjan 算法缩点 , 然后分别统计出 入度为0 和 出度为0 的强连通分量个数 num1 和 num2,那么, 问题一的答案就是 num1 , 问题二的答案就是 max(num1 , nu...
分类:
Web程序 时间:
2015-05-10 09:50:36
阅读次数:
121
每次找出入度小于K的编号最大点。
找的时候用线段树找,找完之后将这个点出度链接的点的入度全部减一
简直爆炸。。。
#include
#include
#include
#include
using namespace std;
#define lson (pos<<1)
#define rson (pos<<1|1)
const int maxn = 100005;
const int IN...
分类:
其他好文 时间:
2015-04-01 21:53:16
阅读次数:
104
题目地址:HDU 1827
先缩点,缩完点后,找出入度为0的块就是需要传递的块。然后用块中花费最少的来当代表块中的花费。累加起来就行了。
代码如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define LL ...
分类:
其他好文 时间:
2015-02-22 23:08:31
阅读次数:
328
题解:二分答案之后就是混合图(有向边+无向边)的欧拉回路问题。如何判断欧拉回路是否存在?把该图的无向边随便定向,计算每个点的入度和出度。如果有某个点出入度之差为奇数,那么肯定不存在欧拉回路。因为欧拉回路要求每点入度 = 出度,也就是总度数为偶数,存在奇数度点必不能有欧拉回路。 好了,现在每个点入度和...
分类:
其他好文 时间:
2014-12-28 19:25:27
阅读次数:
128
拓扑排序。反向建边。为了序号小的尽量在前面,我们每次都取出入度为0的最大的点。#include#include#include#include#include#include#include#includeusing namespace std;struct list{ int u,v,w; ...
分类:
编程语言 时间:
2014-10-21 11:40:40
阅读次数:
185
题目链接
题意:一个有向图,每对一个结点操作,就可以触发连锁反应,使得该结点及它直接或间接指向的点均获得标记,问至少需要操作多少个结点使得所有结点获得标记
思路:有向图的强连通分量,用Tarjan缩点之后找出入度为0的点的个数,即为答案。跟UVA11504一样的题目。
UVA11504
代码:
#include
#include
#include
#...
分类:
其他好文 时间:
2014-10-17 16:57:26
阅读次数:
169
题目链接
题意:多米诺骨牌的游戏,给出一些牌,以及哪张牌倒了之后会推倒哪张牌,求最少的推倒牌的张数,使得所有牌都倒下去。
思路:有向图的强连通分量,用Tarjan缩点之后找出入度为0的点的个数,即为答案。
代码:
#include
#include
#include
#include
using namespace std;
const int MAXN...
分类:
其他好文 时间:
2014-10-17 00:24:43
阅读次数:
225