问题描述:输入N个整数,代表hubs的数量,输入M个数,M代表着关系,接下来是M行:每一行输出两个hubs和他们之间的长度
输入:4 6
1 2 1
1 3 1
1 4 2
2 3 1
3 4 1
2 4 1
输出:
1(代表路径中的长度的最大值)
3(代表路径的总得长度)
1 2
1 3
2 4
不知道为什么总是wrong answer
看别人被接受的代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
//并查集 F - Network
using namespace std;
struct node
{
int v1; int v2;int l;
} s[15003];
int n,m,f[1003];char flag[15003];
bool cmp(node a,node b)//***
{
if(a.l!=b.l) return a.l<b.l;
if(a.v1!=b.v1) return a.v1<b.v1;
return a.v2<b.v2;
}
int getf(int a)
{
if(f[a]!=a)
f[a]=getf(f[a]);
return f[a];
}
int main()
{
int t,i,mi,sum=0;
scanf("%d%d",&n,&m);
for(i=0;i<=n;i++)
f[i]=i;
for(t=0;t<m;t++)
scanf("%d%d%d",&s[t].v1,&s[t].v2,&s[t].l);
sort(s,s+m,cmp);
for(i=0;i<m;i++)
{
int fa=getf(s[i].v1),fb=getf(s[i].v2);
if(fa!=fb)
flag[i]=1,f[fa]=fb,mi=s[i].l,sum+=1;
}
printf("%d\n%d\n",mi,sum);
for(int j=0;j<m;j++)
if(flag[j]) printf("%d %d\n",s[j].v1,s[j].v2);
return 0;
}
自己写的代码
#include <iostream>
#include <stdio.h>
#define Maxn 1010
using namespace std;
int father[Maxn];
void make_set(int n)
{
for(int i=0;i<n;i++)
father[i]=i;
}
int find_set(int x)
{
if(father[x]==x) return x;
else
father[x]=find_set(father[x]);
return father[x];
}
void unite(int x,int y)
{
int fx=find_set(x);
int fy=find_set(y);
if(fx==fy) return;
else
father[fx]=fy;
}
void swap(int a[],int b[],int c[],int n)
//对长度按照从小到大的顺序排序,全部交换
{
int t1,t2,t3;
for(int i=1;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{ if(c[i]>c[j])
{
t1=a[i];a[i]=a[j];a[j]=t1;
t2=b[i];b[i]=b[j];b[j]=t2;
t3=c[i];c[i]=c[j];c[j]=t3;
}
}
}
}
int main()
{
int n,m,c,nn;
int a[15003],b[15003],len[15003];
int sum=0;
bool flag[15003]={0};
scanf("%d%d",&n,&m);
nn=n;
make_set(n);
for(int i=1;i<=m;i++)
scanf("%d%d%d",&a[i],&b[i],&len[i]);
swap(a,b,len,m);
for(int i=1;i<=m;i++)
{
//只需要把所有的数都加进去即可停止
if(find_set(a[i])!=find_set(b[i]))
{
if(n>0)
{
sum+=len[i];
n--;
flag[i]=1;
unite(a[i],b[i]);
c=len[i];//每次的输入c都被替换,因为a[],b[],已经是排过顺序的
}
}
}
printf("%d\n%d\n",c,sum);
for(int i=1;i<=m;i++)
{
if(flag[i]==1)
printf("%d %d\n",a[i],b[i]);
}
return 0;
}
但最终还是wrong answer 找不到原因