Problem p00200 (C++) — buggy submission, verdict: Time Limit Exceeded

#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;
#define FOR(i, k, n) for (int i = (k); i < (n); i++)
#define REP(i, n) FOR(i, 0, n)
#define ALL(a) begin(a), end(a)
#define MS(m, v) memset(m, v, sizeof(m))
#define D10 fixed << setprecision(10)
typedef vector<int> vi;
typedef vector<string> vs;
typedef pair<int, int> P;
typedef long long ll;
const ll INF = 114514810;
const ll MOD = 1000000007;
const double EPS = 1e-8;
const double PI = acos(-1.0);
struct edge {
  int from, to, cost;
  bool operator<(const edge &e) const { return cost < e.cost; }
  bool operator>(const edge &e) const { return cost > e.cost; }
};
int dx[] = {-1, 0, 0, 1};
int dy[] = {0, -1, 1, 0};
bool valid(int x, int y, int h, int w) {
  return (x >= 0 && y >= 0 && x < h && y < w);
}
///*************************************************************************************///
///*************************************************************************************///
///*************************************************************************************///

int main() {
  int n, m;
  while (cin >> n >> m, n) {
    int tim[101][101], cos[101][101];
    REP(i, m) REP(j, m) tim[i][j] = (i == j ? 0 : INF);
    REP(i, m) REP(j, m) cos[i][j] = (i == j ? 0 : INF);
    while (n--) {
      int a, b, c, d;
      cin >> a >> b >> c >> d;
      a--;
      b--;
      tim[a][b] = tim[b][a] = c;
      cos[a][b] = cos[b][a] = d;
    }
    REP(k, m)
    REP(i, m) REP(j, m) tim[i][j] = min(tim[i][j], tim[i][k] + tim[k][j]);
    REP(k, m)
    REP(i, m) REP(j, m) cos[i][j] = min(cos[i][j], cos[i][k] + cos[k][j]);
    int q;
    cin >> q;
    while (q--) {
      int a, b, c;
      cin >> a >> b >> c;
      a--;
      b--;
      cout << (c == 0 ? tim[a][b] : cos[a][b]) << endl;
    }
  }
}

Error: TLE

Fixed submission:

#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;
#define FOR(i, k, n) for (int i = (k); i < (n); i++)
#define REP(i, n) FOR(i, 0, n)
#define ALL(a) begin(a), end(a)
#define MS(m, v) memset(m, v, sizeof(m))
#define D10 fixed << setprecision(10)
typedef vector<int> vi;
typedef vector<string> vs;
typedef pair<int, int> P;
typedef long long ll;
const ll INF = 114514810;
const ll MOD = 1000000007;
const double EPS = 1e-8;
const double PI = acos(-1.0);
struct edge {
  int from, to, cost;
  bool operator<(const edge &e) const { return cost < e.cost; }
  bool operator>(const edge &e) const { return cost > e.cost; }
};
int dx[] = {-1, 0, 0, 1};
int dy[] = {0, -1, 1, 0};
bool valid(int x, int y, int h, int w) {
  return (x >= 0 && y >= 0 && x < h && y < w);
}
///*************************************************************************************///
///*************************************************************************************///
///*************************************************************************************///

int main() {
  int n, m;
  while (cin >> n >> m, n) {
    int g[101][101][2];
    REP(k, 2) REP(i, 101) REP(j, 101) g[i][j][k] = (i == j ? 0 : INF);
    while (n--) {
      int a, b, c, d;
      cin >> a >> b >> c >> d;
      a--;
      b--;
      g[a][b][0] = g[b][a][0] = c;
      g[a][b][1] = g[b][a][1] = d;
    }
    REP(l, m)
    REP(k, m) REP(i, m) REP(j, m) g[i][j][l] =
        min(g[i][j][l], g[i][k][l] + g[k][j][l]);
    int q;
    cin >> q;
    while (q--) {
      int a, b, c;
      cin >> a >> b >> c;
      a--;
      b--;
      cout << g[a][b][c] << endl;
    }
  }
}