最小生成树
2026-02-07 10:56:54
发布于:浙江
#include<bits/stdc++.h>
using namespace std;
vector<pair<long long,long long>> adj[100000];
long long dis[1000];
int vis[1000],cnt[1000];
int main(){
long long n,m,k;
cin>>n>>m>>k;
for(int i=1;i<=m;i++){
long long u,v;
long long w;
cin>>u>>v>>w;
adj[u].push_back({v,w});
adj[v].push_back({u,w});
}
for(int i=1;i<=n;i++){
vis[i]=0;
dis[i]=LONG_LONG_MAX;
}
dis[1]=0;
long long ans=0;
priority_queue<pair<long long,long long>,vector<pair<long long,long long> >,greater<pair<long long,long long> > > q;
q.push({0,1});
while(!q.empty()){
auto cur=q.top();q.pop();
long long u=cur.second,d=cur.first;
if(vis[u]==1) continue;
vis[u]=1;
cnt[u]++;
if(cnt[u]>=n) continue;
//ans%=k;
//d%=k;
ans+=d;
ans%=k;
for(auto e:adj[u]){
long long v=e.first,w=e.second;
if(vis[v]==0&&w<dis[v]){
//w%=k;
dis[v]=w;
q.push({dis[v],v});
}
}
}
ans%=k;
cout<<ans;
return 0;
}
全部评论 2
666
2026-02-07 来自 浙江
01+1=2
2026-02-07 来自 浙江
0





















有帮助,赞一个