随笔分类 -  ACM题解

上一页 1 ··· 7 8 9 10 11
摘要:题目链接这题大意是给一个有向图,求至少给多少个结点发消息能使消息传遍整个网络,并进一步求出至少添加多少条边能使对图中任意一个结点发消息都能使消息传遍整个网络。可以先用kosaraju将强连通分支缩点,得到原图的基图,然后统计入度为0的连通分量个数和出度为0的连通分量个数,入度为0的必须给它发消息,入度不为0的不必给发消息,所以第一问所求即为缩点后的图中入度为0的个数,至于第二问,只需将入度为0的结点与出度为0的结点连接即可满足要求,最少需加边数目为两者之中的较大者,需注意的是,单只有一个连通分量时,输出结果为0 。这题第一次提及后TLE,原因竟是N不够大,为什么不是RE呢?View Code 阅读全文
posted @ 2012-04-02 16:05 BeatLJ 阅读(541) 评论(0) 推荐(0)
摘要:题目链接题目大意,给定一个有向图,按顺序输出“自己可达的顶点都可到达自己”的顶点。由于没有按顺序输出,WA了一次。View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <memory.h> 4 #define CLR(a) (memset(a,0,sizeof(a))) 5 #define N 5001 6 struct node 7 { 8 int v; 9 struct node *next; 10 }; 11 struct node *in[N],*out[N]; 12 char 阅读全文
posted @ 2012-03-31 23:30 BeatLJ 阅读(352) 评论(0) 推荐(0)
摘要:题目链接题目大意,给一个有向图,求是否任意两点都单向联通。这题我用的是两次dfs求强连通图,将强连通分量缩成一个点,然后对缩点后的有向图进行拓扑排序,判断单项连通。因为一个小错误,WA了3次,第一次dfs时是求各点的后根遍历次序(时间戳),但是是以第cnt次访问的是第v个结点的形式来保存,这样可以很方便从访问次序找相应结点,便于第二次dfs。我在写的时候,不小心就写成了保存第v个结点的时间戳,自然就错了。View Code 1 #include <stdio.h> 2 #include <memory.h> 3 #define CLR(a) memset(a,0,siz 阅读全文
posted @ 2012-03-31 22:38 BeatLJ 阅读(442) 评论(0) 推荐(0)
摘要:题目链接求一个无向图的桥(可能存在重边),输出割边的数目,并按顺序输出割边的序号(输入的顺序)。由于有重边,一般需要使用邻接表来存储,我一开始嫌麻烦,想使用邻接矩阵和边集来存,没注意到节点数目太大,结果MLE。最终还是得用邻接表,写好后,有贡献了一次PE,改正格式后居然WA了,经检查在插入边时有点问题,插入时要先查找该边是否已出现,当初使用的是if(findEdge(a,b)==0&&findEdge(b,a)==0)来判断边是否已插入,后来发现这个不能保证findEdge(a,b)和findEdge(b,a)都会执行,改成if(findEdge(a,b)+findEdge(a 阅读全文
posted @ 2012-03-30 16:18 BeatLJ 阅读(484) 评论(0) 推荐(0)

上一页 1 ··· 7 8 9 10 11