来源:http://ace.delos.com/usacoprob2?a=ecro6SKAJN4&S=agrinet
这题明显的最小生成树,说多了都侮辱我的智商了= =
/* ID:ay27272 PROG:agrinet LANG:C++ */ #include <iostream> #include <cstdio> #include <cstring> using namespace std; #define NN 105 int map[NN][NN]={0}; int dist[NN]; bool f[NN]; int main() { freopen("agrinet.in","r",stdin); freopen("agrinet.out","w",stdout); int n; cin>>n; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) cin>>map[i][j]; memset(dist,10,sizeof(dist)); memset(f,true,sizeof(f)); int total=0; int S=1; for (int i=1;i<=n;i++) if (map[S][i]!=0) dist[i]=map[S][i]; dist[1]=0; f[S]=false; int min,h; for (int i=2;i<=n;i++) { min=dist[0]; for (int j=1;j<=n;j++) if (f[j] && dist[j]<min) min=dist[h=j]; f[h]=false; total+=min; for (int j=1;j<=n;j++) if (map[h][j]!=0 && map[h][j]<dist[j]) dist[j]=map[h][j]; } cout<<total<<endl; return 0; }