package yukicoder317; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.Scanner; public class Main { static class UnionFind{ static int[] data; UnionFind(int size){ data=new int[size]; Arrays.fill(data, -1); } boolean unionSet(int x,int y){ x=root(x); y=root(y); if(x!=y){ if(data[y] list=new ArrayList<>(); int[][] cost=new int[n+1][1000]; for(int i=0;i1){ if(sum+Math.pow(2, count)<=num){ cost[(int)Math.pow(2, count)*i][(int)Math.pow(2, count)-1]+=(int)Math.pow(2, count); nodes[i][s]-=(int)Math.pow(2, count); sum+=Math.pow(2, count); }else if(sum+Math.pow(2, count)>num){ cost[nodes[i][s]*i][nodes[i][s]-1]=nodes[i][s]; nodes[i][s]=0; } count++; } for(int j=0;j=0;k--){ if(k-i==0){ d[k]=0; continue; }else if(d[k-i]!=-1){ if(d[k]!=-1){ d[k]=Math.min(d[k], d[k-i]+cost[i][s]); }else if(d[k]==-1){ d[k]=d[k-i]+cost[i][s]; } } } } } } for(int i=1;i<=n;i++){ System.out.println(d[i]); } System.err.println(new Date().getTime()-t+"ms"); } }