1 条题解
-
0
C++ :
#include <bits/stdc++.h> using namespace std; struct node{ int x,y,len; }; int f[110]; node a[10010]; int t,k = 0; int n,q; int find(int x){ return x == f[x]?x:f[x] = find(f[x]); } void merge(int x,int y){ int fx = find(x); int fy = find(y); if(fx != fy){ f[fx] = fy; } } bool cmp(node n1,node n2){ return n1.len < n2.len; } int main() { cin>>n; for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ cin>>t; if(i > j){ k++; a[k].x = i; a[k].y = j; a[k].len = t; } } } for(int i = 1;i <= n;i++){ f[i] = i; } sort(a+1,a+k+1,cmp); cin>>q; int x,y; int c = 0; for(int i = 1;i <= q;i++){ cin>>x>>y; if(find(x) != find(y)){ c++; merge(x,y); } } if(c >= n - 1){ cout<<0; return 0; } int s = 0; for(int i = 1;i <= k;i++){ if(find(a[i].x) != find(a[i].y)){ merge(a[i].x,a[i].y); c++; s = s + a[i].len; } if(c == n - 1){ cout<<s; break; } } }
Pascal :
var ans,n,min,i,j,q,p,x,y:longint; a:array[0..101,0..101] of longint; d,f:array[0..101] of longint; v:array[0..101] of boolean; procedure prim; var i,j:longint; begin for i:=1 to n do d[i]:=maxlongint; d[1]:=0; for i:=1 to n do f[i]:=1; for i:=1 to n do begin min:=maxlongint; for j:=1 to n do if (v[j]=false) and (d[j]<min) then begin min:=d[j]; q:=j; end; ans:=ans+a[q,f[q]]; v[q]:=true; for j:=1 to n do if (q<>j) and (v[j]=false) and (a[q,j]>=0) and (a[q,j]<d[j]) then begin d[j]:=a[q,j]; f[j]:=q; end; end; end; begin readln(n); for i:=1 to n do for j:=1 to n do read(a[i,j]); readln(p); for i:=1 to p do begin read(x,y); a[x,y]:=0; a[y,x]:=0; end; prim; write(ans); end. AC
- 1
信息
- ID
- 2125
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者