摘要: 思路:将所有强连通分支找出来,并进行缩点,然后找其中所有出度为0的连通分支,就是题目要求的。#include#include#include#include#include#define Maxn 5100#define Maxm Maxn*100#define inf 0x7fffffffusing namespace std;int index[Maxn],vi[Maxn],stack[Maxn],dfn[Maxn],low[Maxn],e,n,lab,top,num,list,mark[Maxn],degree[Maxn],be[Maxn];struct Edge{ int fro... 阅读全文
posted @ 2013-07-20 16:35 fangguo 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 思路:建图时,分别建正向图edge和转置图T。用正向图edge来DFS,找出第一个被发现的强连通分支(如果该图存在题目要求的点,那么一定就是第一个被发现的)。然后用spfa跑转置图T,判断被发现的点是否可以到达所有点,如可以,就把该连通同的点数输出。否则输出0 。#include#include#include#include#include#define Maxn 10100#define Maxm Maxn*10#define inf 0x7fffffffusing namespace std;int index[Maxn],vi[Maxn],stack[Maxn],dfn[Maxn],l 阅读全文
posted @ 2013-07-20 15:05 fangguo 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 思路与poj3177一模一样。#include#include#include#include#include#define Maxn 1010#define Maxm Maxn*Maxn#define inf 0x7fffffffusing namespace std;int dfn[Maxn],low[Maxn],degree[Maxn],e,n,lab,index[Maxn];struct Edge{ int to,from,next,v;}edge[Maxm];void init(){ memset(dfn,0,sizeof(dfn)); memset(low,0,s... 阅读全文
posted @ 2013-07-20 10:04 fangguo 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 思路:dfs求出所有点的low值,然后对每个连通分量进行缩点,可以通过low来进行缩点。虽然在同一连通分量里可能存在不同的low值,但这并不影响缩点。将每个连通分量缩为一个点后,只要求出这个缩点后的树上的叶子节点个数就行了。结果为(leaf+1)/2。#include#include#include#include#include#include#define Maxn 1010#define Maxm Maxn*10using namespace std;int index[Maxn],degree[Maxn],dfn[Maxn],low[Maxn],e,n,lab=0,num,visit[ 阅读全文
posted @ 2013-07-20 10:01 fangguo 阅读(169) 评论(0) 推荐(0) 编辑