| 比赛 |
csp2025模拟练习3 |
评测结果 |
AATAAAAAAA |
| 题目名称 |
Minimum Cost Roads |
最终得分 |
90 |
| 用户昵称 |
健康铀 |
运行时间 |
5.572 s |
| 代码语言 |
C++ |
内存使用 |
9.40 MiB |
| 提交时间 |
2025-10-30 10:37:51 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct E{int u,v,l,c;}e[2005];
bool cmp(E a,E b){return a.l==b.l?a.c<b.c:a.l<b.l;}
long long d[2005][2005],ans;
int main(){
freopen("Roads.in","r",stdin);
freopen("Roads.out","w",stdout);
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)d[i][j]=1e18;
for(int i=1;i<=n;i++)d[i][i]=0;
for(int i=1;i<=m;i++)cin>>e[i].u>>e[i].v>>e[i].l>>e[i].c;
sort(e+1,e+m+1,cmp);
for(int i=1;i<=m;i++){
int u=e[i].u,v=e[i].v,l=e[i].l,c=e[i].c;
if(d[u][v]>l){
ans+=c;
for(int x=1;x<=n;x++)
for(int y=1;y<=n;y++){
if(d[x][y]>d[x][u]+l+d[v][y])d[x][y]=d[x][u]+l+d[v][y];
if(d[x][y]>d[x][v]+l+d[u][y])d[x][y]=d[x][v]+l+d[u][y];
}
}
}
cout<<ans;
return 0;
}