Submission #2337430


Source Code Expand

#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long int64;
 
const int64 INF = 1LL << 58;
 
 
int main()
{
  int N, M, L, S, T;
  int64 g[300][300];
  int x[16], y[16];
  int64 dp[1 << 16][16];
 
  while(scanf("%d %d %d %d %d", &N, &M, &L, &S, &T), N) {
 
    --S;
    fill_n(*g, 300 * 300, INF);
    for(int i = 0; i < 300; i++) g[i][i] = 0;
    fill_n(*dp, (1 << 16) * 16, INF);
 
    for(int i = 0; i < M; i++) {
      int A, B, C;
      scanf("%d %d %d", &A, &B, &C);
      --A, --B;
      g[A][B] = g[B][A] = C;
    }
    for(int i = 0; i < L; i++) {
      scanf("%d %d", &x[i], &y[i]);
      --x[i];
    }
 
    for(int k = 0; k < N; k++) {
      for(int i = 0; i < N; i++) {
        for(int j = 0; j < N; j++) {
          g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
        }
      }
    }
 
    for(int i = 0; i < L; i++) {
      dp[1 << i][i] = g[S][x[i]] + y[i];
    }
    for(int i = 0; i < 1 << L; i++) {
      for(int j = 0; j < L; j++) {
        if(dp[i][j] == INF) continue;
        for(int k = 0; k < L; k++) {
          if((i >> k) & 1) continue;
          dp[i | (1 << k)][k] = min(dp[i | (1 << k)][k], dp[i][j] + g[x[j]][x[k]] + y[k]);
        }
      }
    }
 
    int ret = 0;
    for(int i = 0; i < 1 << L; i++) {
      for(int j = 0; j < L; j++) {
        if(dp[i][j] + g[x[j]][S] <= T) {
          ret = max(ret, __builtin_popcount(i));
        }
      }
    }
 
    printf("%d\n", ret);
  }
}

Submission Info

Submission Time
Task C - SIRO Challenge
User ei13333
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1498 Byte
Status AC
Exec Time 1054 ms
Memory 9088 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:17:3: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   while(scanf("%d %d %d %d %d", &N, &M, &L, &S, &T), N) {
   ^
./Main.cpp:26:36: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
       scanf("%d %d %d", &A, &B, &C);
                                    ^
./Main.cpp:31:35: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
       scanf("%d %d", &x[i], &y[i]);
                                   ^

Judge Result

Set Name all
Score / Max Score 100 / 100
Status
AC × 1
Set Name Test Cases
all Merged
Case Name Status Exec Time Memory
Merged AC 1054 ms 9088 KB