摘要:
题意:此题最难的部分即是理解题意。注意要求得点的定义为:所有这个点能到达的点都能到达这个点。思路:强连通,缩点,找出出度为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)
浙公网安备 33010602011771号