#include "Annalib.h" #define ull unsigned long long #define INF 4000000000000000000LL #include static ull w[301][301]; static bool v[90010]; static int R[61], cnt[5]; static int hc[62][6]; void Anna(int N, int M, int A[], int B[], long long C[], int Q, int S[], int T[], int K, int U[]) { int i, j, k, x, y, xx, yy; ull g; for (i = 0; i < K; i++){ v[U[i]] = true; } for (i = 0; i < Q; i++)R[i] = -1; for (i = 0; i < N; i++){ for (j = 0; j < N; j++){ if (i != j)w[i][j] = INF; else w[i][j] = 0; } } for (i = 0; i < M; i++){ if (!v[i])w[A[i]][B[i]] = C[i]; } for (k = 0; k < N; k++){ for (i = 0; i < N; i++){ for (j = 0; j < N; j++){ if (w[i][j]>w[i][k] + w[k][j])w[i][j] = w[i][k] + w[k][j]; } } } for (i = 0; i < K; i++){ x = A[U[i]], y = B[U[i]]; for (j = 0; j < Q; j++){ xx = S[j], yy = T[j]; g = w[xx][x] + w[y][yy] + C[U[i]]; if (w[xx][yy]>g){ w[xx][yy] = g; R[j] = i; } } } for (i = 0; i < Q; i++){ if (R[i] != -1)cnt[R[i]]++; } hc[1][0]=1; for(i=0;i<=Q+1;i++){ for(j=0;j<=K;j++){ if(i!=0){ hc[i][j]+=hc[i-1][j]; } if(j!=0){ hc[i][j]+=hc[i][j-1]; } } } j=0; k=Q; for (i = 0; i < K; i++){ k-=cnt[i]; j+=hc[k][K-i]; } j=hc[Q+1][K]-j; for(i=0;j;i++){ if(j>1){ Tap(j%2); } j/=2; } }