Advertisement
Guest User

Anna

a guest
Jun 21st, 2014
976
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include "Annalib.h"
  2. #define ull unsigned long long
  3. #define INF 4000000000000000000LL
  4. #include<stdio.h>
  5. static ull w[301][301];
  6. static bool v[90010];
  7. static int R[61], cnt[5];
  8. static int hc[62][6];
  9. void Anna(int N, int M, int A[], int B[], long long C[], int Q, int S[], int T[], int K, int U[]) {
  10.     int i, j, k, x, y, xx, yy;
  11.     ull g;
  12.     for (i = 0; i < K; i++){
  13.         v[U[i]] = true;
  14.     }
  15.     for (i = 0; i < Q; i++)R[i] = -1;
  16.     for (i = 0; i < N; i++){
  17.         for (j = 0; j < N; j++){
  18.             if (i != j)w[i][j] = INF;
  19.             else w[i][j] = 0;
  20.         }
  21.     }
  22.     for (i = 0; i < M; i++){
  23.         if (!v[i])w[A[i]][B[i]] = C[i];
  24.     }
  25.     for (k = 0; k < N; k++){
  26.         for (i = 0; i < N; i++){
  27.             for (j = 0; j < N; j++){
  28.                 if (w[i][j]>w[i][k] + w[k][j])w[i][j] = w[i][k] + w[k][j];
  29.             }
  30.         }
  31.     }
  32.     for (i = 0; i < K; i++){
  33.         x = A[U[i]], y = B[U[i]];
  34.         for (j = 0; j < Q; j++){
  35.             xx = S[j], yy = T[j];
  36.             g = w[xx][x] + w[y][yy] + C[U[i]];
  37.             if (w[xx][yy]>g){
  38.                 w[xx][yy] = g;
  39.                 R[j] = i;
  40.             }
  41.         }
  42.     }
  43.     for (i = 0; i < Q; i++){
  44.         if (R[i] != -1)cnt[R[i]]++;
  45.     }
  46.     hc[1][0]=1;
  47.     for(i=0;i<=Q+1;i++){
  48.         for(j=0;j<=K;j++){
  49.             if(i!=0){
  50.                 hc[i][j]+=hc[i-1][j];
  51.             }
  52.             if(j!=0){
  53.                 hc[i][j]+=hc[i][j-1];
  54.             }
  55.         }
  56.     }
  57.     j=0;
  58.     k=Q;
  59.     for (i = 0; i < K; i++){
  60.         k-=cnt[i];
  61.         j+=hc[k][K-i];
  62.     }
  63.     j=hc[Q+1][K]-j;
  64.     for(i=0;j;i++){
  65.         if(j>1){
  66.             Tap(j%2);
  67.         }
  68.         j/=2;
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement