我就差异这道题我的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;
}