比赛 csp2025模拟练习3 评测结果 AAAAAAAAAA
题目名称 Minimum Cost Roads 最终得分 100
用户昵称 梦那边的美好ME 运行时间 0.740 s
代码语言 C++ 内存使用 3.90 MiB
提交时间 2025-10-30 09:37:03
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long

struct node{
	ll u,v,l,p;
	bool operator<(node aa){
        if(l!=aa.l) return l<aa.l;
        return p<aa.p;
    }
}a[2100];

ll n,m;
ll ans;

vector<pair<ll,ll> > g[2100];
ll dis[2100],vis[2100];
priority_queue<pair<ll,ll> > q;

void dijkstra(ll nw,ll to) {
	memset(dis,0x3f,sizeof dis);
	memset(vis,0,sizeof vis); 
    dis[nw]=0;
    q.push(make_pair(0,nw));
    while(!q.empty()){
        ll u=q.top().second;
        q.pop();
        if(vis[u]) continue;
        ll v;
        for(int i=0;i<g[u].size();i++){
            v=g[u][i].first;
            ll w=g[u][i].second;
            if(dis[v]>dis[u]+w){
                dis[v]=dis[u]+w;
                q.push(make_pair(-dis[v],v));
            }
        }
    }
}

int main(){
	freopen("Roads.in","r",stdin);
	freopen("Roads.out","w",stdout);
	ios::sync_with_stdio(0);cin.tie(0);
	cin>>n>>m;
	for (int i=1;i<=m;i++){
		cin>>a[i].u>>a[i].v>>a[i].l>>a[i].p;
	}
	sort(a+1,a+m+1);
	ll u,v,l,p;
	for(int i=1;i<=m;i++){
        u=a[i].u;
		v=a[i].v;
		l=a[i].l;
		p=a[i].p;
		dijkstra(u,v);
        if(dis[v]>l){
        	ans+=p;
			g[u].push_back(make_pair(v,l));
            g[v].push_back(make_pair(u,l));
		}
    }
    cout<<ans<<endl;
	return 0;
}