摘要: 题意:给出一个有向图G,寻找所有的sink点。“sink”的定义为:{v∈V|∀w∈V:(v→w)⇒(w→v)},对于一个点v,所有能到达的所有节点w,都能够回到v,这样的点v称为sink。分析:由(v→w),(w→v)可知,节点v,w构成强连通,很自然的想到要缩点。缩点之后,DAG上的每一条边,都是单向的(v->w),无回路(w->v)。错误:对于v可达的点w,不仅是直接连边——从一个强连通子集A到另一个强连通子集B,意味着,子集A中的点都不可能是sink点。 1 #include 2 #include 3 #include 4 #include 5 using namespac 阅读全文
posted @ 2013-10-03 12:01 Thousand Sunny 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 题意:我们常根据无向边来计算每个节点的度,现在反过来了,已知每个节点的度,问是否可图,若可图,输出一种情况。分析:这是一道定理题,只要知道可图定理,就是so easy了 可图定理:对每个节点的度从大到小排序,取第一个(最大)的度的节点,依次与其后(度)的节点连边,每连一条边,对应的度减1。然后重新排序,重复以上步骤,若度出现负值,则不可图。(若n个点中,某点的度>=n,那么也是不可能的) 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int MAXN=22; 7 8 int a[MAXN],r[MAX. 阅读全文
posted @ 2013-10-03 10:48 Thousand Sunny 阅读(295) 评论(0) 推荐(0) 编辑