这一份货车运输的代码:
#include<cstdio>
#include<iomanip>
#include<algorithm>
using namespace std;
const int N=1e5+50;
const int INF=0x7f7f7f7f;
struct edge{
int to;
int val;
int nxt;
}a[N];
struct side{
int u;
int v;
int w;
}g[N];
int head[N];
int fa[N];
int f[N][30];
int mine[N][30];
int dep[N];
int cnt;
int nn,m;
int n;
int q;
int minex;
int miney;
bool vis[N];
int Min(int a,int b)
{
if(a>b) return b;
return a;
}
bool cmp(side a,side b)
{
return a.w>b.w;
}
void add(int u,int v,int w)
{
cnt++;
a[cnt].to=v;
a[cnt].val=w;
a[cnt].nxt=head[u];
head[u]=cnt;
}
int Find(int x)
{
if(fa[x]==x) return x;
return fa[x]=Find(fa[x]);
}
void Init()
{
for(int i=1;i<=nn;i++) fa[i]=i;
for(int i=0;i<=n;i++)
{
for(int j=0;j<=20;j++) mine[i][j]=INF;
}
}
bool Merge(int x,int y)
{
int X=Find(x);
int Y=Find(y);
if(X==Y) return false;
fa[X]=Y;
return true;
}
bool Kruscal()
{
int cnt=0;
for(int i=1;i<=m;i++)
{
if(Merge(g[i].u,g[i].v))
{
add(g[i].u,g[i].v,g[i].w);
add(g[i].v,g[i].u,g[i].w);
cnt++;
}
if(cnt==n-1) return true;
}
return false;
}
void DFS(int u,int fa,int data)
{
dep[u]=dep[fa]+1;
f[u][0]=fa;
mine[u][0]=data;
for(int i=1;i<=20;i++)
{
f[u][i]=f[f[u][i-1]][i-1];
mine[u][i]=min(mine[u][i-1],mine[f[u][i-1]][i-1]);
}
for(int i=head[u];i;i=a[i].nxt)
{
int v=a[i].to;
if(v==fa) continue;
DFS(v,u,a[i].val);
}
}
void Find_LCA(int x,int y)
{
if(dep[x]<dep[y]) swap(x,y);
for(int i=20;i>=0;i--)
{
if(dep[f[x][i]]>=dep[y]) minex=Min(minex,mine[x][i]),x=f[x][i];
if(x==y) return ;
}
for(int i=20;i>=0;i--)
{
if(f[x][i]!=f[y][i])
{
minex=Min(minex,mine[x][i]);
miney=Min(miney,mine[y][i]);
x=f[x][i],y=f[y][i];
}
}
minex=Min(minex,mine[x][0]);
miney=Min(miney,mine[y][0]);
}
int main()
{
scanf("%d%d",&nn,&m);
int x,y,z;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
if(!vis[x]) n++,vis[x]=true;
if(!vis[y]) n++,vis[y]=true;
g[i].u=x,g[i].v=y,g[i].w=z;
}
sort(g+1,g+1+m,cmp);
Init();
if(!Kruscal())
{
printf("-1\n");
return 0;
}
DFS(1,0,INF);
scanf("%d",&q);
for(int i=1;i<=q;i++)
{
scanf("%d%d",&x,&y);
minex=INF,miney=INF;
if(!vis[x]||!vis[y])
{
printf("-1\n");
continue;
}
Find_LCA(x,y);
printf("%d\n",Min(minex,miney));
}
return 0;
}
引来了一些奇怪的编译错误:
请问各位大佬这是咋回事呢?