题目:
[Agri-Net]https://www.luogu.org/problemnew/show/P1546
解题思路:
Dij
源程序:
#include <cstdio>
#define r(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int a[101][101],v[101],min,ans,n,p;
void read(int &f)
{
f=0;bool d=0;char c;
while (c=getchar(),c<'0'||c>'9') if (c=='-') d=1;f=f*10+c-48;
while (c=getchar(),c>='0'&&c<='9') f=f*10+c-48;
if (d) f*=-1;
}
void write(int x)
{
if (x<0) {x=-x;putchar('-');}
if (x) write(x/10);else return;
putchar(x%10+48);
}
int main()
{
read(n);
r(i,1,n)
r(j,1,n)
read(a[i][j]);
r(i,1,n)
v[i]=a[1][i];
r(k,1,n-1)
{
min=2147483647;
r(i,1,n)
if (v[i]<min&&v[i]!=0)
min=v[i],p=i;
ans+=v[p];
v[p]=0;
r(i,1,n)
if(a[p][i]<v[i])
v[i]=a[p][i];
}
write(ans);
}