Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34833 | 方巾予 | 【S】T2 | C++ | 解答错误 | 0 | 1000 MS | 88592 KB | 1550 | 2024-11-14 21:29:11 |
#include<bits/stdc++.h> using namespace std; #define ll long long #define m_p(x,y) make_pair(x,y) int n,q; int du,dv,dw; int dx[5010],dy[5010]; vector<pair<int,int> > g[5010]; ll ans,dis[5010]; int vis[5010]; int cnt; priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > pq; int dist(int x,int y){ return pow(abs(dx[x]-dx[y]),3)+pow(abs(dy[x]-dy[y]),3); } void prim(){ memset(dis,0x3f3f3f3f,sizeof(dis)); memset(vis,0,sizeof(vis)); cnt=0; ans=0; pq.push(m_p(0,1)); dis[1]=0; while(!pq.empty()){ if(cnt>=n) cnt++; int u=pq.top().second; int w=pq.top().first; pq.pop(); if(vis[u]) continue; vis[u]=1; cnt++; ans+=w; for(auto ed : g[u]){ int v=ed.second; int d=ed.first; if(d<dis[v]){ dis[v]=d; pq.push(m_p(d,v)); } } } } signed main(){ //freopen("test.in","r",stdin); scanf("%d%d",&n,&q); for(int i=1;i<=n;i++){ scanf("%d%d",&dx[i],&dy[i]); } for(int i=1;i<n;i++){ for(int j=i+1;j<=n;j++){ g[i].push_back(m_p(dist(i,j),j)); g[j].push_back(m_p(dist(i,j),i)); } } prim(); printf("%lld\n",ans); while(q--){ scanf("%d%d%d",&du,&dv,&dw); g[du].push_back(m_p(dw,dv)); g[dv].push_back(m_p(dw,du)); prim(); printf("%lld\n",ans); } return 0; }