#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define lowbit(x) (x&(-x)) #define max(x,y) (x>y?x:y) #define min(x,y) (x=node[i].cost;j--) { if(dp[j]=0;k--) { if(dp[k]==ans) { cnt=0;sum=0; for(int i=n,j=k;i>=1 && j>=0;i--) { if(path[i][j]) { vis[top][++cnt]=i; sum+=i; j-=node[i].cost; } } vis[top][0]=cnt; sort(vis[top]+1,vis[top]+1+cnt); if(pos>sum) { pos=sum; mark=top; } else if(pos==sum) { for(int s=1;s<=vis[top][0] && s<=vis[mark][0];s++) { if(vis[mark][s]==vis[top][s]) continue; else if(vis[mark][s]