Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34777 swzzzz 【S】T2 C++ 运行超时 30 1000 MS 84384 KB 2114 2024-11-14 15:16:43

Tests(3/10):


#include<bits/stdc++.h> using namespace std; #define N 3003 int n,q; pair<int,int>pos[N]; long long dis(int i,int j){ long long tmp1=abs(pos[i].first-pos[j].first), tmp2=abs(pos[i].second-pos[j].second); return tmp1*tmp1*tmp1+tmp2*tmp2*tmp2; } long long g[N][N]; struct node { int from,to; long long w; bool operator<(node x) const{ return w>x.w; } }e[N]; bool vis[N]; long long d[N]; long long prim(){ long long ans=0; int cnt=0; priority_queue<node>q; memset(d,0x3f,sizeof(d)); d[1]=0; q.push({0,1,0}); while (!q.empty()) { if(cnt==n) break; node cur=q.top(); q.pop(); if(vis[cur.to]) continue; vis[cur.to]=1; ans+=d[cur.to]; if(cnt!=0) e[cnt]=cur; cnt++; for(int i=1;i<=n;i++){ if(!vis[i] && d[i]>g[cur.to][i]){ d[i]=g[cur.to][i]; q.push({cur.to,i,d[i]}); } } } return ans; } int fa[N]; int query(int x){ if(fa[x]==x) return x; return fa[x]=query(fa[x]); } void merge(int x,int y){ x=query(x),y=query(y); if(x==y) return; fa[x]=y; } long long kruskal(int u,int v,long long w){ for(int i=1;i<=n;i++) fa[i]=i; priority_queue<node>q; for(int i=1;i<n;i++) q.push(e[i]); q.push({u,v,w}); long long ans=0; int cnt=0; while (!q.empty()) { if(cnt==n-1) break; node cur=q.top(); q.pop(); if(query(cur.from)==query(cur.to)) continue; merge(cur.from,cur.to); ans+=cur.w; cnt++; e[cnt]=cur; } return ans; } int main(){ ios::sync_with_stdio(0); cin>>n>>q; for(int i=1;i<=n;i++) cin>>pos[i].first>>pos[i].second; for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ g[i][j]=g[j][i]=dis(i,j); } } cout<<prim()<<endl; for(int i=1;i<=q;i++){ int u,v,w; cin>>u>>v>>w; cout<<kruskal(u,v,w)<<endl; } return 0; }


测评信息: