#include #include #include #include #include #include #include #include #include #include #include using namespace std; const int INF=1<<30; const int maxn=500+50; const int maxm=2000+10; struct edge{ int u,v,w; edge(int u=0,int v=0,int w=0):u(u),v(v),w(w){} }e[maxn+maxm]; int sum[maxn],a[maxn],tot,in[maxn],pre[maxn],id[maxn],vis[maxn]; void add(int u,int v,int w) { e[tot++]=edge(u,v,w); } int Directed_MST(int root,int numv,int nume) { int i,j,k,u,v,ans=0; while(true) { for(i=0;isum[i];j--)add(j,j-1,0); add(sum[n],sum[i],0); } int c,d,l1,l2,money; for(i=0;i