最小生成树问题。
用矩阵输入的。
不过很忧伤的是用G++ 提交AC。。C++ 就一直RE。
不过题中说了最多 100 X 100 的矩阵啊。
Logically, they are N lines of N space-separated integers. Physically, they are limited in length to 80 characters, so some lines continue onto others.
→_→ 不知各位怎么理解这句。
#include<cstdio> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<queue> #include<map> #include<stack> #include<iostream> #include<list> #include<set> #include<cmath> #define INF 0x7fffffff #define eps 1e-6 using namespace std; int n; struct lx { int u,v,len; } l[500*1001]; int fa[1001]; bool cmp(lx a,lx b) { return a.len<b.len; } int father(int x) { if(x!=fa[x]) return fa[x]=father(fa[x]); } int main() { while(scanf("%d",&n)!=EOF) { for(int i=0; i<=n; i++) fa[i]=i; int cot=0; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) { int len; scanf("%d",&len); if(i==j)continue; l[cot].u=i; l[cot].v=j; l[cot++].len=len; } sort(l,l+cot,cmp); int ans=0; for(int i=0; i<cot; i++) { int fu=father(l[i].u); int fv=father(l[i].v); if(fu==fv)continue; fa[fv]=fu; ans+=l[i].len; } printf("%d\n",ans); } }