poj 2485

原创 2015年11月21日 12:27:24

题目大意:

        简而言之,给出一个完全无向图,求其中所有生成树中最大权边最小的值。


输入可能看不懂就是:
     第i行 的分别j个数据对应了  i<->j边的权值。

输出这个最大权边最小值。


最小生成树算法。

#include <iostream>
#include <algorithm>
#define N 505

struct Edge
{
   int u,v;
   int dis;
   Edge():u(0),v(0),dis(0){
   };
   bool operator < (const Edge &a) const
   {
   	return dis<a.dis;
   }
}edges[N*N];
using namespace std;
int total=0;
int T,n;
int rank[N];
int father[N];

void MakeSet()
{
	for (int i=0;i<n;++i)
	{
		father[i]=i;
		rank[i]=0;
	}
}
int find(int x)
{
  while(x!=father[x])
    x=father[x];
  return x;	
}
bool Union(int x,int y)
{
	int px=find(x);
	int py=find(y);
	if(px!=py)
	{
		if(rank[px]>rank[py])
			father[py]=px;
		else
		  {
		  	 if(rank[px]==rank[py])
		  	 	rank[py]++;
		  	 father[px]=py;
		  }
		return 1;
	}
	return 0;
}
int Kruskal();


int main()
{
	cin>>T;
	while(T--)
	{
	  total=0;
	  scanf("%d",&n);
	  for (int i=0;i<n;++i)
	    for (int j=0;j<n;++j)	
	    {
	      edges[total].u=i;
	      edges[total].v=j;
	      scanf("%d",&edges[total].dis);
	      total++;
	    } 
		printf("%d\n",Kruskal());
		
	}
	return 0;
}
int Kruskal()
{
	MakeSet();
	sort(edges,edges+total);
	int ans=0;
	int cnt=1;
	for (int i=0;i<total;++i)
	{
		int v=edges[i].v;
		int u=edges[i].u;
		if(Union(v,u))
		{
			ans=max(ans,edges[i].dis);
			cnt++;
		}
		if(cnt==n)break;
	}
	return ans;
}

还有一点:!!!!!

第一次我用的是   std::cin, 时间是766Ms

第二次我用的是   scanf() ,时间是250Ms

在输入输出量巨大的时候输入流不能乱用,还是用格式输入输出好了。

相关文章推荐

POJ2485-Highways【Prim】

  • 2011年07月30日 18:35
  • 8KB
  • 下载

poj 2485 Highways 测试数据

  • 2013年03月01日 18:08
  • 3.61MB
  • 下载

最小生成树典型例题 POJ2485 Highways

原题链接:POJ2485 Highways 样例输入 1 3 0 990 692 990 0 179 692 179 0 样例输出 692 Hint Huge input,sc...

poj 2485 Highways (最小生成树)

链接:poj 2485 题意:输入n个城镇相互之间的距离,输出将n个城镇连通费用最小的方案中修的最长的路的长度 这个也是最小生成树的题,只不过要求的不是最小价值,而是最小生成树中的最大权值,只需要加个...

POJ 2485 Highways 最小生成树 (Kruskal)

Description The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has no public ...
  • AXuan_K
  • AXuan_K
  • 2014年07月22日 14:49
  • 1055

poj 2485 秒杀

就是求最小生成树中那条最大的边。。。。 #include #include #include #include #include #include using namespace std; ...

poj1789 2485 1258

典型的prim算法,以每两个string之间转换的代价作为边的权值 一开始用邻接表一直RE,忘记将储存边的记录清0.。。最后结果1500ms 然后直接换了数组,结果300+ms 我。。。 #inclu...
  • yeqm_
  • yeqm_
  • 2015年10月08日 15:45
  • 153

POJ 2485 公路

#include #include using namespace std; static const int MAXNODES = 501; static const int MAXINT = ...

poj 2485Highways(最小生成树 Kruskal)

很明显的一道最小生成树的题…… #include #include #include using namespace std; struct Edge { int start;//边的起点 int...

POJ 2485 Highways【最小生成树】

//9188632 ylwh 2485 Accepted 632K 188MS G++ 1066B 2011-08-18 17:15:42 #include #include #include ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 2485
举报原因:
原因补充:

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