请问答案 ans 每次取 min ,如果将 ans 初值赋 LONG_MAX 会 WA on #10,并且错误原因是输出了 -1 ,改成一个别的数(如4e18) 就会 AC 请问这是为什么?
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int inf=4e18;
int n,m;
int S,T;
const int maxn=2e6+10;
struct coins{
int x,y,s,t;
bool operator<(const coins &o) const{
return t<o.t;
}
}a[maxn],tmp[maxn];//tmp临时数组 (维护生成树)
int fa[maxn];
inline int get(int x)
{
if(x==fa[x])return x;
return fa[x]=get(fa[x]);
}
signed main()
{
scanf("%lld%lld",&n,&m);
scanf("%lld%lld",&S,&T);
int ans=inf;
for(int i=1;i<=m;i++)scanf("%lld%lld%lld%lld",&a[i].x,&a[i].y,&a[i].s,&a[i].t);
sort(a+1,a+m+1);
int tot=0,now=0;
for(int i=1;i<=m;i++)
{
tmp[++tot]=a[i];
for(int j=tot-1;j>=1;j--)
{
if(tmp[j].s>tmp[j+1].s)
{
swap(tmp[j],tmp[j+1]);
}
}
now=0;
for(int j=1;j<=n;j++)fa[j]=j;
for(int j=1;j<=tot;j++)
{
int fa1=get(tmp[j].x),fa2=get(tmp[j].y);
if(fa1!=fa2)
{
fa[fa1]=fa2;
tmp[++now]=tmp[j];//更新kruskal
}
}
if(now==n-1)
{
ans=min(ans,S*tmp[now].s+T*a[i].t);//更新
}
tot=now;
}
if(ans==inf)puts("-1");
else printf("%lld\n",ans);
return 0;
}