Submission #630713

# Submission time Handle Problem Language Result Execution time Memory
630713 2022-08-17T01:37:10 Z iee Dostavljač (COCI18_dostavljac) C++17
140 / 140
298 ms 3288 KB
// iee
#include <bits/stdc++.h>
#define int long long
using ll = long long;
using ull = unsigned long long;
using pii = std::pair<int,int>;
using db = double;
using ld = long double;
#define py puts("YES")
#define pn puts("NO")
#define pf puts("-1")
#define hh puts("")
#define fi first
#define se second
#define mkp make_pair
#define re =RD()
#define rd RD()
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define eb emplace_back
#define ep emplace
#define ci const int
#define vi vector<int>
#define fn for(int i=1;i<=n;++i)
#define rep(stO,a,b) for(int stO=(a);stO<=(b);stO++)
#define Rep(stO,a,b) for(int stO=(a);stO<(b);stO++)
#define per(Orz,a,b) for(int Orz=(a);Orz>=(b);Orz--)
#define ina int n,a[N];
#define rna n=RD();fn a[i]=RD();
using namespace std;
int qpow(int a, int b, int p) { int res = 1 % p; while (b) { if (b % 2) res = 1ll * res * a % p; a = 1ll * a * a % p; b /= 2; } return res; }
int RD() { int x = 0, f = 1, ch = getchar(); while (!isdigit(ch)) { if (ch == '-') f = -1; ch = getchar(); } while (isdigit(ch)) { x = x * 10 + (ch - '0'); ch = getchar(); } return x * f; }
//ci p = 998244353 1000000007; int fac[N], inv[N], ifac[N]; int binom(int x, int y, int MOD = p) { if (x < y) return 0; return 1ll * fac[x] * ifac[y] % p * ifac[x - y] % p; } void init(int LIM = N - 1, int MOD = p) { fac[0] = ifac[0] = inv[1] = 1; rep(i, 1, LIM) fac[i] = 1ll * fac[i - 1] * i % MOD; rep(i, 2, LIM) inv[i] = 1ll * (MOD - MOD / i) * inv[MOD % i] % MOD; rep(i, 1, LIM) ifac[i] = 1ll * ifac[i - 1] * inv[i] % MOD; }
void work(int);

signed main() { int CASINPUT = 1;
  string op = R"(
                 )";if (op.size() == 19) cin >> CASINPUT; rep(CUR, 1, CASINPUT) work(CUR); }
ci N = 505;
vi e[N];
int n, m, f[N][N][2];
void dfs(int u,int pr) {
 for(int v:e[u]){
  if(v == pr)continue;
  dfs(v,u);
  per(j,m,1)Rep(k,0,j){
   if(j-k-2 >= 0)
    f[u][j][0] = max(f[u][j][0],f[u][j - k - 2][0] + f[v][k][0]),
    f[u][j][1] = max(f[u][j][1],f[u][j - k - 2][1] + f[v][k][0]);
   f[u][j][1] = max(f[u][j][1],f[u][j - k - 1][0] + f[v][k][1]);
  }
 }
}
void work(int CASE) {
 n re, m re;
 rep(i,1,n) f[i][1][0] = f[i][1][1] re;
 Rep(i,1,n){
  int u re,v re;
  e[u].pb(v),e[v].pb(u);
 }
 dfs(1, 0);
 int mx=0;
 rep(i,1,m) mx = max({mx,f[1][i][0],f[1][i][1]});
 cout << mx;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 452 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 468 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 596 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 836 KB Output is correct
2 Correct 3 ms 724 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 980 KB Output is correct
2 Correct 38 ms 968 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 73 ms 1528 KB Output is correct
2 Correct 24 ms 1516 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 24 ms 1876 KB Output is correct
2 Correct 170 ms 1576 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 145 ms 2664 KB Output is correct
2 Correct 58 ms 3068 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 298 ms 3288 KB Output is correct
2 Correct 28 ms 2412 KB Output is correct