比赛 csp2025模拟练习3 评测结果 AAAAAAAAAA
题目名称 Minimum Cost Roads 最终得分 100
用户昵称 李奇文 运行时间 0.536 s
代码语言 C++ 内存使用 3.93 MiB
提交时间 2025-10-30 09:19:30
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=4e3+5,inf=1e9+7;
int n,m,d[N],vis[N],ans;
struct edge{
	int v,w;
};
vector<edge>e[N];
struct node{
	int u,v,l,c;
}a[N];
bool cmp(node x,node y){
	if(x.l==y.l){
		return x.c<y.c;
	}
	return x.l<y.l;
}
int dijkstra(int st,int ed){
	priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>q;
	for(int i(1);i<=n;++i){
		d[i]=inf;
		vis[i]=0;
	}
	d[st]=0;
	q.push({0,st});
	while(!q.empty()){
		int u=q.top().second;
		q.pop();
		if(vis[u]) continue;
		vis[u]=1;
		for(auto to:e[u]){
			int vi=to.v,wi=to.w;
			if(d[vi]>d[u]+wi){
				d[vi]=d[u]+wi;
				q.push({d[vi],vi});
			}
		}
	}
	return d[ed];
}
signed main(){
	freopen("Roads.in","r",stdin);
	freopen("Roads.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i(1);i<=m;++i){
		cin>>a[i].u>>a[i].v>>a[i].l>>a[i].c;
	}
	sort(a+1,a+1+m,cmp);
	for(int i(1);i<=m;++i){
		int minroad=dijkstra(a[i].u,a[i].v);
		if(a[i].l<minroad){
			ans+=a[i].c;
			e[a[i].u].push_back({a[i].v,a[i].l});
			e[a[i].v].push_back({a[i].u,a[i].l});
		}
	}
	cout<<ans<<"\n";
	return 0;
}