Submission #884357

# Submission time Handle Problem Language Result Execution time Memory
884357 2023-12-07T08:45:38 Z vjudge1 Toll (APIO13_toll) C++17
16 / 100
2500 ms 11196 KB
/// I'm only brave when I have to be
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
#define F first
#define S second
#define pb push_back
#define ppb pop_back
#define fast_io ios::sync_with_stdio(false);cin.tie(NULL);
#define file_io freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#define FOR(i,k,n) for(int i = k; i < n; ++ i)
#define debf cout<<"(0-0)\n";
#define all(x) x.begin(), x.end()
#define dec(x) cout << fixed << setprecision(x);
#define pf push_front
#define ppf pop_front
#define dash " ------- "
#define what(x) cerr << #x << " is " << x << endl;
#define eb emplace_back
//#define int short int
#define int long long
#define sz(s) (int) (s.size())
#define fl cout.flush()

using namespace std;
//using namespace __gnu_pbds;

typedef long long ll;
typedef pair <int, int> pii;
typedef pair <int, pii> pip;
typedef pair <pii, int> ppi;
typedef pair <ll, ll> pll;
typedef unsigned long long ull;
typedef long double ld;

template <class T> using max_heap = priority_queue <T, vector <T>, less <T> >;
template <class T> using min_heap = priority_queue <T, vector <T>, greater <T> >;
//template <class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

constexpr int MOD = 1e9 + 7, N = 2e5 + 8, M = 1e6 + 1, SQ = 300, INF = 2e8 + 8, LGN = 22, mod = 998244353, P = 131113;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int n, m, k, sz[N], par[N], a, b, c, h[N], ans, siz[N], x[N];
vector <int> v[N];
vector <pip> edge;

int getpar (int aa){
  return par[aa] == -1 ? aa : par[aa] = getpar(par[aa]);
}

void dsu (int aa, int bb){
  if ((aa = getpar(aa)) == (bb = getpar(bb))){
    return;
  }
  if (sz[aa] < sz[bb]){
    swap (aa, bb);
  }
  par[bb] = aa;
  sz[aa] += sz[bb];
  return;
}

void dfs (int u, int par = -1){
  for (int i : v[u]){
    if (i != par){
      h[i] = h[u] + 1;
      dfs (i, u);
      siz[u] += siz[i];
    }
  }
  return;
}

int32_t main(){
  fast_io;
  cin >> n >> m >> k;
  FOR (i, 0, m){
    int aa, bb, cc;
    cin >> aa >> bb >> cc;
    edge.pb({cc, {-- aa, -- bb}});
  }
  sort (all(edge));
  cin >> a >> b;
  for (int i = 0; i < n; ++ i){
    cin >> x[i];
  }
  -- a;
  -- b;
  for (int i = 0; i < M; ++ i){
    fill (par, par + 100, -1);
    fill (sz, sz + 100, 1);
    for (int j = 0; j < 15; ++ j){
      v[j].clear();
      siz[j] = x[j];
    }
    bool used = false;
    for (pip j : edge){
      if (j.F >= i){
        if (getpar(a) != getpar(b)){
          dsu (a, b);
          v[a].pb(b);
          v[b].pb(a);
          used = true;
        }
      }
      if (getpar(j.S.F) != getpar(j.S.S)){
        v[j.S.F].pb(j.S.S);
        v[j.S.S].pb(j.S.F);
        dsu (j.S.F, j.S.S);
      }
    }
    if (!used){
      continue;
    }
    //cout << i << '\n';
    dfs (0);
    if (h[a] > h[b]){
      ans = max (ans, i * siz[a]);
    }
    else {
      ans = max (ans, i * siz[b]);
    }
  }
  cout << ans;
  return 0;
}

// Yesterday is history
// Tomorrow is a mystery
// but today is a gift
// That is why it is called the present
# Verdict Execution time Memory Grader output
1 Correct 261 ms 10844 KB Output is correct
2 Correct 215 ms 10840 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 261 ms 10844 KB Output is correct
2 Correct 215 ms 10840 KB Output is correct
3 Execution timed out 2590 ms 11196 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 261 ms 10844 KB Output is correct
2 Correct 215 ms 10840 KB Output is correct
3 Execution timed out 2590 ms 11196 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 261 ms 10844 KB Output is correct
2 Correct 215 ms 10840 KB Output is correct
3 Execution timed out 2590 ms 11196 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 261 ms 10844 KB Output is correct
2 Correct 215 ms 10840 KB Output is correct
3 Execution timed out 2590 ms 11196 KB Time limit exceeded
4 Halted 0 ms 0 KB -