#include #include #include #include #include #define N 400*400 using namespace std; int t,n,a[405][405]; int v,e,low[N],p[N],q[N],adj[N]; bool f[N]; struct Edge { int v,w,next; }edge[4*N]; void insert(int u,int v,int w) { edge[e].v=v;edge[e].w=w; edge[e].next=adj[u]; adj[u]=e++; } int spfa(int s) { memset(f,0,sizeof(f)); memset(low,0x7f,sizeof(low)); int i,j,k,x,h=0,t=1; v=n*n+1; q[t]=s; low[s]=0; while(h!=t) { h=(h+1)%(v+1); x=q[h]; f[x]=0; for(k=adj[x];k!=-1;k=edge[k].next) { i=edge[k].v; j=edge[k].w; if(j+low[x]