之前写了一道最小生成树的题,以下是我的代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+50;
struct edge{
int f;
int t;
int val[N];
}g[N];
bool vis[N];
int mine[N];
int ans[N];
int fa[N];
int cnt;
int n,m,k,d;
bool cmp(edge a,edge b)
{
return a.val[cnt]>b.val[cnt];
}
int Find(int x)
{
if(x==fa[x]) return x;
return Find(fa[x]);
}
bool Merge(int x,int y)
{
int X=Find(x);
int Y=Find(y);
if(X==Y) return false;
fa[X]=Y;
return true;
}
int main()
{
scanf("%d%d%d%d",&n,&m,&k,&d);
int u,v,w;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
g[i].f=u;
g[i].t=v;
for(int j=1;j<=d;j++)
{
scanf("%d",&w);
g[i].val[j]=w;
}
}
memset(ans,0x7f,sizeof(ans));
for(int i=1;i<=n;i++) fa[i]=i;
int tt=0;
int pos=0;
bool q=false;
for(int k=1;k<=d;k++)
{
cnt++;
pos=0;
sort(g+1,g+1+m,cmp);
q=!q;
for(int i=1;i<=m;i++)
{
if(vis[i]==q) continue;
vis[i]=q;
if(Merge(g[i].f,g[i].t))
{
tt++;
mine[++pos]=i;
}
if(tt==n-1) break;
}
}
for(int i=1;i<=pos;i++)
{
for(int j=1;j<=d;j++)
{
ans[i]=min(ans[i],g[mine[j]].val[i]);
}
printf("%d ",ans[i]);
}
return 0;
}
但是编译器却给出了:
请问各位大佬这是怎么回事呢?