ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

电厂计划

2019-07-08 22:38:05  阅读:217  来源: 互联网

标签:int 电厂 edge dfn 计划 include ec low


题目描述】:

停电,漆黑的夜晚。

ACM + +是一家电力公司。该公司拥有数个发电厂,每一个供应一个小面积,这些发电厂给这个公司带来了很多的麻烦,在某些地区没有足够的电力,而在其他地区却有大量的盈余。

ACM ++因此决定将一些发电厂连接成一个网络。当然第一阶段,没有必要将所有的发电厂连接到一个网络,但另一方面,它必须在关键地方建立冗余连接,即网络不保证是连通的。现在提出了各种连接的计划,并已开始复杂的评估。

必须考虑的评估标准之一是创建的网络的可靠性。我们假设可以发生的最坏的事件是一个发电厂故障,这可能会导致网络分成几个部分。虽然每一部分都可以工作,但被分成的部分越多,麻烦可能性就越大。因此,我们必须找出所有方案中,某个电厂故障,会形成的最大块数。
【输入描述】:

输入由若干实例组成。

每个实例第一行都包含两个整数P和C(1 <= P = 10,000,C >= 0),中间用空格隔开。P是电厂的数量。电厂编号为0到P - 1之间的整数。C是边数。下面的C行,每一行包含两个整数0 < = P1,P2<P用一个空格隔开,这意味着电厂P1和P2连接。每个连接不会重复描述。输入终止的行包含两个零。
【输出描述】:

输出由若干行组成。输出的第i行对应于第i个输入实例。输出的每一行由一个整数组成,即通过在实例中删除一个连接点,最多可以使网络分成的最大块数。
【样例输入】:

3 3
0 1
0 2
2 1
4 2
0 1
2 3
3 1
1 0
0 0

【样例输出】:

1
2
2

【时间限制、数据范围及描述】:

时间:1s 空间:64M

1 <= P = 10,000

注意没有边的情况

中文

#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
#include <algorithm>
using namespace std;

const int MAXN=10005;
const int MAXM=50005;
int n,m,p[MAXN],ec,ansM,gc;
struct cyq{
	int v,next;
}edge[MAXM];

void add(int u, int v){	 
	edge[++ec].v = v;
	edge[ec].next = p[u];
	p[u] = ec;
}
int dfn[MAXN],cTime,low[MAXN],ans[MAXN];	
bool flag;

void Tarjan(int u,int fa){
    dfn[u]=low[u]=++cTime;bool flag=1;
    for(int i=p[u];i;i=edge[i].next){	
        int v=edge[i].v;if(v==fa && flag){flag=0; continue;}
        if(!dfn[v]){
            Tarjan(v,u);low[u]=min(low[u],low[v]);
			if(low[v]>=dfn[u]) ans[u]++;
		}
		else low[u]=min(low[u],dfn[v]);
    }
}

int main(){
	scanf("%d%d",&n,&m);
	while(n!=0){
		int x,y;ec=0;memset(p,0,sizeof(p));
		cTime=0;ansM=0;gc=0;
		memset(low,0,sizeof(low));
		memset(dfn,0,sizeof(dfn));
		memset(ans,0,sizeof(ans));
		for(int i=1;i<=m;i++){scanf("%d%d",&x,&y);add(x+1,y+1);add(y+1,x+1);}
		for(int i=1;i<=n;i++) if(!dfn[i]){gc++;ans[i]=-1;Tarjan(i,0);}
		for(int i=1;i<=n;i++) ansM=max(ansM,ans[i]);
		printf("%d\n",gc+ansM);
		scanf("%d%d",&n,&m);
	}
	return 0;
}


标签:int,电厂,edge,dfn,计划,include,ec,low
来源: https://blog.csdn.net/hssl_ywl/article/details/95104557

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有