2011年10月30日
摘要: 题意:此题最难的部分即是理解题意。注意要求得点的定义为:所有这个点能到达的点都能到达这个点。思路:强连通,缩点,找出出度为0的强连通分量集合,就是要求得点集合。#include<iostream> #define min(a,b) (a<b?a:b) using namespace std; const int N=5005; bool mat[N][N]; int dfn[N],low[N]; bool instack[N]; int indgr[N]; int outdgr[N]; int stack[N]; int sp; int index; int n,m; int 阅读全文
posted @ 2011-10-30 19:28 不是我干的 阅读(143) 评论(0) 推荐(0)
摘要: 题意:每个学校有他的对象名单。即给你一个有向图。问题一:要求信息从某些节点进去,能到达所有其它节点。求出“某些节点”这个节点集合的最小值。问题二:要求添加“某些有向边”,满足无论信息从哪个节点进入,都能传达到所有节点。求“某些有向边“这个集合的最小值。思路:先用tarjan求出强连通分量,然后缩点形成一个有向无环图。有向无环图肯定存在入度为0的节点。入度为0的节点的个数=问题1的答案。对于问题二。其实不难。注意到缩点后形成的是有个有向五环图。可以看成森林,即多棵树。查找根节点和叶子节点,即入度为0的节点和出度为0的节点。要让一棵树为连通,很直观的就可以看出,最简单的办法就是将叶子节点直接连在根 阅读全文
posted @ 2011-10-30 15:59 不是我干的 阅读(146) 评论(0) 推荐(0)
摘要: 虽然基本上和3352是一样的题意,但是要数据比较严格,这题有可能出现重边,而3352不会有重边。思路:直接在POJ3352,即上一篇博文上的代码稍微改动。新建一个char match[N][N],如果用int则内存超了。#include<iostream> #define min(a,b) (a<b?a:b) using namespace std; const int N=5005,M=10005; int n,m; char match[N][N]; struct Edge { int v,next; }edge[M]; int edgehead[N]; int k=1; 阅读全文
posted @ 2011-10-30 13:13 不是我干的 阅读(140) 评论(0) 推荐(0)