zoj 1119 /poj 1523 SPF】的更多相关文章

poj : http://poj.org/problem?id=1523 如果无向图中一个点 u 为割点 则u 或者是具有两个及以上子女的深度优先生成树的根,或者虽然不是一个根,但是它有一个子女 w, 使得low[w] >= dfn[u]; 其中low[u] 是指点 u 通过回边所能达到的 最小深度优先数,dfn[u]是指 点u 当前所处的 深度优先数: low[u] 是在递归回退时计算出来的,dfn[u] 是在递归时直接计算的. low[u] = min { dfn[u]; min{  low…
题目描述:考虑图8.9中的两个网络,假定网络中的数据只在有线路直接连接的2个结点之间以点对点的方式传输.一个结点出现故障,比如图(a)所示的网络中结点3出现故障,将会阻止其他某些结点之间的通信.结点1和结点2仍然是连通的,结点4和结点5也是连通的,但这2对结点之间 的通信无法进行了.因此结点3是这个网络的一个SPF结点.严格的定义:对于一个连通的网络,如果一个结点出现故障,将会阻止至少一对结点之间的通信,则该结点是SPF结点.注意,图所示的网络不存在SPF结点.至少两个结点出现故障后,才会使得其…
题目链接:http://poj.org/problem?id=1523 题意:给出无向图的若干条边,求割点以及各个删掉其中一个割点后将图分为几块. 题目分析:割点用tarjan算法求出来,对于每个割点,dfs一次图,求出有几块不连通的子图. AC代码: #include<cstdio> #include<cstring> +; struct EDGE{ int v,next; }edge[N*N/]; int first[N],low[N],dfn[N],cut[N],vis[N]…
                                                               SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7110   Accepted: 3242 Description Consider the two networks shown below. Assuming that data moves around these networks on…
                                                                     SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8155   Accepted: 3730 Description Consider the two networks shown below. Assuming that data moves around these netwo…
题目链接 题意 : 找出图中所有的割点,然后输出删掉他们之后还剩多少个连通分量. 思路 : v与u邻接,要么v是u的孩子,要么u是v的祖先,(u,v)构成一条回边. //poj1523 #include <cstdio> #include <cstring> #include <iostream> using namespace std ; ][],dfn[],low[],subnet[] ; int tot,Node ,son; void dfs(int u) { d…
题意:给出一个网络(不一定连通),求所有的割点,以及割点可以切分出多少个连通分量. 思路:很多种情况. (1)如果给的图已经不是连通图,直接“  No SPF nodes”. (2)求所有割点应该不难,就是tarjan发明的算法搞定.但是求连通分量就得小心了,多种情况.看下: 1)如果一个割点x,其所有孩子都不是割点,那么x至少可以割出两个连通分量(x之上和之下的各1个). 2)如果一个割点x,其有部分孩子是割点,有部分孩子并不是割点,那么x可以割出x之上的1个连通分量,不是割点的孩子均是同1个…
题目要求割顶集,并且还要求出去掉割顶之后剩下的图连通数目. tarjan算法求出割顶后直接枚举就可以了吧. 一开始想到利用iscut[u]的次数也就是点u被判定为割顶的次数求连通分量数,还有利用与结点u相连的点的bccno不同的编号来判定,都是不行的,具体原因自己想清楚比较好. 以后就不会犯这样的错误了. 代码: #include <iostream> #include <sstream> #include <cstdio> #include <climits&g…
SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7246   Accepted: 3302 Description Consider the two networks shown below. Assuming that data moves around these networks only between directly connected nodes on a peer-to-peer basis, a…
思路:使用tarjan算法求出割点,在枚举去掉每一个割点所能形成的联通块的个数. 注意:后来我看了下别的代码,发现我的枚举割点的方式是比较蠢的方式,我们完全可以在tarjan过程中把答案求出来,引入一下讨论: 如果这个割点是根节点,在tarjan算法中搜到几个孩子结点(low[v] >= dfn[u]),他就能割出几个联通块,如果这个割点是孩子结点,那么他所形成的联通块的个数+1,因为他还有一条与父亲结点间接或直接相连的边. 代码如下: #include<map> #include<…