题解
【入门】道路规划
1 条题解
-
0
#include<bits/stdc++.h> using namespace std; int dp[1001][1001],fa[1001]; int n,cnt,ans,m; int find(int x){ if(x!=fa[x]){ fa[x]=find(find(fa[x])); } return fa[x]; } struct no{ int x,y,w; }s[10001]; bool cmp(no a,no b){ return a.w<b.w; } int main(){ cin>>n; for(int i=1;i<=n;i++){ fa[i]=i; } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>dp[i][j]; } } cin>>m; for(int i=0;i<m;i++){ int a,b; cin>>a>>b; fa[find(a)]=find(b); dp[a][b]=dp[b][a]=0; } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(dp[i][j]){ s[cnt].x=i; s[cnt].y=j; s[cnt].w=dp[i][j]; cnt++; } } } sort(s,s+cnt,cmp); for(int i=0;i<cnt;i++){ if(find(s[i].x)!=find(s[i].y)&&dp[s[i].x][s[i].y]){ fa[find(s[i].x)]=s[i].y; ans+=s[i].w; } } cout<<ans<<endl; return 0; }
- 1