標籤:最小產生樹
最小產生樹問題。
用矩陣輸入的。
不過很憂傷的是用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-6using 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); }}