POJ-1523 SPF 割点

原创 2013年12月04日 12:38:03

题意:给你幅图,求割点 对每个点去掉后联通分量数;

裸Tarjan


#include<stdio.h>
#include<string.h>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 1025;
const int inf = 1<<29;
int n,son;
vector<int>map[maxn];
int dfs_clock,low[maxn],dfn[maxn];
int iscut[maxn];
void dfs( int u,int fa )
{
	low[u] = dfn[u] = ++dfs_clock;
	for( int i = 0; i < map[u].size(); i ++ ){
		int v = map[u][i];
		if( !dfn[ v ] ){
			dfs(v,u);
			low[u] = low[u] <= low[v] ? low[u]:low[v];
			if( low[v] >= dfn[u] ){
				if( fa != -1 )
					iscut[u] ++;
				else
					son ++;
			}
		}
		else if( dfn[v] < dfn[u] && v != fa )  
            low[u] = low[u] <= dfn[v] ? low[u]:dfn[v];  
	}
}
void tarjan()
{
	dfs_clock = 0,son = 0;
	memset( low,0,sizeof(low) );  
    memset( dfn,0,sizeof(dfn) );  
    memset( iscut,0,sizeof(iscut) );
	dfs(1,-1);
	if( son > 1 )
		iscut[1] = son - 1;

}
int main()
{
    //freopen("data.txt","r",stdin);
	int cas = 0,u,v;
	while( scanf("%d",&u) != EOF,u ){
		scanf("%d",&v);
		for( int i = 1; i <= 1000; i ++ )  
            map[i].clear();  
		map[u].push_back( v );
		map[v].push_back( u );
		n = u >= v?u:v;
		while( scanf("%d",&u) == 1 && u ){
			scanf("%d",&v);
			map[u].push_back( v );
			map[v].push_back( u );
			n = u >= v?u:v;
		}
		tarjan();
		int flag = 0;
		if( cas )	puts("");
		printf("Network #%d\n",++cas);
		for( int i = 1; i <= n; i ++ ){
			if( iscut[i] ){
				flag = 1;
				printf("  SPF node %d leaves %d subnets\n",i,iscut[i]+1);
			}
		}
		if( !flag )
			printf("  No SPF nodes\n");
	}
    return 0;
}


POJ 1523 SPF【求割点】

SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7476   Accepted: ...
  • wyjwyl
  • wyjwyl
  • 2016年03月01日 20:15
  • 147

POJ1523 SPF (求割点)

传送门 题目大意:求出每一个割点能将图分成几个部分。思路:乱搞O(∩_∩)O(遇见割点,在对应的数组里加1就行了),但是要注意输出格式很坑,每次要多输出一个空行。#include #include ...

POJ 1523 SPF (割点)

题意:求割点,并计算去掉割点后连通分支的数量。 #include using namespace std; #define N 1005 #define min(a,b) (a...
  • Tsaid
  • Tsaid
  • 2011年10月17日 20:58
  • 544

POJ 1523 SPF Tarjan求割点

链接:http://poj.org/problem?id=1523 题意:N台电脑,如果某台坏掉了,其他电脑就会分成几个不相连接的部分。找出这些电脑,并且算出其坏了其他电脑会分成几个部分。 思路:Ta...

poj_1523 SPF (求割点)

SPF Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3790 Ac...
  • CSDN515
  • CSDN515
  • 2012年08月25日 14:58
  • 628

Poj 1523 SPF(割点 + tarjan算法)

http://poj.org/problem?id=1523 题意:给一个连通网络,其节点数目 思路: tarjan算法:从第一个节点开始深度优先搜索,同时记录每个节点i的访问次序以及该节点所能到达的...

POJ 1523 SPF(求割点)

题意:问去掉每一个割点后的联通分支数; #include #include #include #include #include #include using namespace st...

POJ 1523 SPF 求割点及对应的连通分量数(入门题)

点击打开链接 SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5224   Accepted: 2...

POJ 1523 SPF 割边与割点

本题要求出割点,并算出每个割点将图分成几个分支。 用tarjan算法求的割点,然后对每个割点,dfs求有多少个分支 每点的数是不一定的,我用的set存的点,vector存的图 求多少个分支就是:如果i...

【POJ 1523】SPF(Tarjan求割点)

卧听声声慢,斜倚点点风
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ-1523 SPF 割点
举报原因:
原因补充:

(最多只允许输入30个字)