| 比赛 |
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;
}