杭电 More is better (DFS)

    这一题我想用并查集来着结果超时了,还需要再想想。

    题目大意:找出最大的连通分量。

    注意:时间为1000MS,内存为102400,内存空间很大,但是用矩阵建立图还是会超内存。用vector,用深搜的方法寻找最大分量。n,m记录最小端点与最大端点,DFS时可以减少端点遍历的时间。

    好奇怪,我把n,m定义为min, max时竟然出现编译错误(http://acm.hdu.edu.cn/viewerror.php?rid=9314048  C++编译错误)

(http://acm.hdu.edu.cn/viewerror.php?rid=9314094 G++编译错误)??????有待思考。

 

#include 
#include 
#define MAX 100001
using namespace std;
vector  graph[MAX];
int visit[MAX];
int n, m, N;//N记录连通分量
void DFS(int n)//深搜
{
	int i;
	visit[n] = 1;
    for (i=0; i>num)
	{
		for (i=n; i<=m; i++)//清空vector
		graph[i].clear();
		sum = 1;   //sun记录最大连通分量
		n = MAX, m = -1;  //用n,m缩短端点的遍历范围
		while (num--)
		{
	    	cin>>a>>b;
			graph[a].push_back(b);//建立图
			graph[b].push_back(a);
			if (am) m = a;
			if (b>m) m = b;
		}
		for (i=0; i<=m; i++)
			visit[i] = 0;;
		for (i=n; i<=m; i++)
			if (visit[i]==0)
			{
				N = 1;
				DFS(i);
				if (N>sum)
					sum = N;
			}
	  cout<


 

 

 

你可能感兴趣的:(搜索)