poj 1797 Heavy Transportation 本来以为floyd瞬秒,结果各种re,真无语,看网上别人的并查集了

我就差异这道题我的floyd毫无错误,n为1000,我的数组范围也够,怎么就是re呢,真无语,下面是我的floyd,善良的读者啊!!求解释啊!!第二个程序是我看了别人的并查集写的,但还有地反纠结了
int find(int i)
{
	if(i!=p[i])
	{
		 p[i]=find(p[i]);
	}
	return p[i];//这个地方wa我的时间太长了,returni;为什么就re啊!! 
}
这个为什么return p【i】啊!!我return i;这顿wa啊!!re啊!!!i不是等于p[i]么,不应该一样么 我就服了,太曲折了

#include<iostream>
using namespace std;
int map[2015][2015];
int main()
{
 int cases;
 int t=1,n,m,x,y,l;
 while(cin>>cases)
 {
  scanf("%d%d",&n,&m);
  for(int i=0;i<=n;i++)
  {
   for(int j=0;j<=n;j++)
   map[i][j]=0x7FFFFFFF;
  }
  while(m--)
  {
   scanf("%d%d%d",&x,&y,&l);
   map[x][y]=map[y][x]=l;
  }
  for(int k=0;k<n;k++)
  {
   for(int i=0;i<n;i++)
   {
    for(int j=0;j<n;j++)
    map[i][j]=max(map[i][j],min(map[i][k],map[k][j]));//关键所在 
   }
  }
     printf("Scenario #%d:\n",t++);
  printf("%d\n\n",map[1][n]);
 }
 return 0;
}
#include<iostream> 
#include<algorithm> 
using namespace std;
int p[1005];
int find(int i)
{
	if(i!=p[i])
	{
		 p[i]=find(p[i]);
	}
	return p[i];//这个地方wa我的时间太长了,returni;为什么就re啊!! 
}
struct node
{
	int x;
	int y;
	int l;
} a[1000005];
bool cmp(node a,node b)
{
	return a.l>b.l;
}
int main()
{
	int cases;
	int n,m,t=1;	
	while(cin>>cases)
	{
		while(cases--)
		{
			
			scanf("%d%d",&n,&m);
			for(int i=1;i<=n;i++)
			p[i]=i; 
//			node *a; //动态开内存,我不怎么会!! 
//       	a=new node[m];
			for(int i=0;i<m;i++)
			scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].l);
			sort(a,a+m,cmp);
			int ans=0x7FFFFFFF;
			for(int i=0;i<m;i++)
			{
				int tx=find(a[i].x);
				int ty=find(a[i].y);
				if(tx!=ty)
				{
					if(ans>a[i].l)
					ans=a[i].l;
					p[tx]=ty;
					if(find(1)==find(n))
					break;
				}
			}
			printf("Scenario #%d:\n",t++);
			printf("%d\n\n",ans);
		}
	}
	return 0;
}
					
			
			
	

 

你可能感兴趣的:(poj 1797 Heavy Transportation 本来以为floyd瞬秒,结果各种re,真无语,看网上别人的并查集了)