求助!0分全WA!
查看原帖
求助!0分全WA!
964089
run_away楼主2024/1/28 20:05

rt,代码如下

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,c,u,v,d,dis[200005],head[200005],tot,sum,ans;
struct edge{ll from,to,nxt,val;}e[400005];
inline void add(ll u,ll v,ll w){
	e[++tot]=(edge){u,v,head[u],w};
	head[u]=tot;
}
bool vis[200005];
inline void spfa(ll x){
  memset(dis,0x3f,sizeof(dis));
  queue<ll>q;
  q.push(x),vis[x]=1,dis[x]=0;
  while(!q.empty()){
    ll u=q.front();q.pop();vis[u]=0;
    for(ll i=head[u];i;i=e[i].nxt){
      ll v=e[i].to;
      if(dis[u]+e[i].val<dis[v]){
        dis[v]=dis[u]+e[i].val;
        if(!vis[v]){
          vis[v]=1;
          q.push(v);
        }
      }
    }
  }
}
struct edgedis{ll mdis,id;}mp[200005];
signed main(){
	scanf("%d%d%d",&n,&m,&c);
	for(ll i=1;i<=m;++i){
		scanf("%d%d%d",&u,&v,&d);
		add(u,v,d),add(v,u,d),sum+=d;
	}
	spfa(1),ans=sum;
  for(ll i=1;i<=m;++i){
    mp[i].mdis=max(dis[e[i*2-1].from],dis[e[i*2-1].to]),mp[i].id=i*2-1;
  }
  sort(mp+1,mp+m+1,[](edgedis a,edgedis b){return a.mdis<b.mdis;});
	for(ll i=1;i<=m;++i){
    sum-=e[mp[i].id].val;
		ans=min(ans,mp[i].mdis*c+sum);
    ++tot;
	}
  printf("%lld",ans);
}

这份代码通过了所有样例和学校OJ的测试,但是在atcoder上全WA.

2024/1/28 20:05
加载中...