计算机学院大学生程序设计竞赛(2015’12) 1004 Happy Value
#include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<algorithm> using namespace std; const int maxn=100+10; int G[maxn][maxn]; int f[maxn]; int n; struct Egde { int u,v; int val; } e[maxn*maxn]; bool cmp(const Egde&a,const Egde&b) { return a.val>b.val; } int Find(int x) { if(x!=f[x]) f[x]=Find(f[x]); return f[x]; } int main() { while(~scanf("%d",&n)) { for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) scanf("%d",&G[i][j]); int tot=0; for(int i=1; i<=n; i++) for(int j=i+1; j<=n; j++) { e[tot].u=i; e[tot].v=j; e[tot].val=G[i][j]; tot++; } sort(e,e+tot,cmp); for(int i=1; i<=n; i++) f[i]=i; int sum=0; for(int i=0; i<tot; i++) { int fu=Find(e[i].u); int fv=Find(e[i].v); if(fu!=fv) { f[fu]=fv; sum=sum+e[i].val; } } printf("%d\n",sum); } return 0; }