Submission #228124

# Submission time Handle Problem Language Result Execution time Memory
228124 2020-04-30T02:22:03 Z racsosabe Museum (CEOI17_museum) C++17
100 / 100
479 ms 170616 KB
#include<bits/stdc++.h>
#define all(v) (v).begin(),(v).end()
#define pb push_back
#define ppb pop_back
#define mp make_pair
#define ri(x) scanf("%d",&(x))
#define ri2(x,y) scanf("%d %d",&(x),&(y))
#define ri3(x,y,z) scanf("%d %d %d",&(x),&(y),&(z))
#define rll(x) scanf("%lld",&(x))
#define rll2(x,y) scanf("%lld %lld",&(x),&(y))
#define rll3(x,y,z) scanf("%lld %lld %lld",&(x),&(y),&(z))
#define gc(x) ((x) = getchar())
using namespace::std;

const long double PI = acos(-1);
const long long MOD = 1000000000 +7;

typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<ll,pll> tll;
typedef pair<int,int> ii;
typedef pair<int,ii> iii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<iii> viii;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<tll> vtll;
typedef vector<string> vs;
typedef set<int> si;
typedef set<ii> sii;
typedef set<iii> siii;

ll gcd(ll a, ll b){ return b==0?a:gcd(b,a%b);}

ll add(ll a, ll b, ll m = MOD){
	if(a >= m) a %= m;
	if(b >= m) b %= m;
	if(a < 0) a += m;
	if(b < 0) b += m;
	ll res = a+b;
	if(res >= m or res <= -m) res %= m;
	if(res < 0) res += m;
	return res;
}

ll mul(ll a, ll b, ll m = MOD){
	if(a >= m) a %= m;
	if(b >= m) b %= m;
	if(a < 0) a += m;
	if(b < 0) b += m;
	ll res = a*b;
	if(res >= m or res <= -m) res %= m;
	if(res < 0) res += m;
	return res;
}

ll pow_mod(ll a, ll b, ll m = MOD){
	ll res = 1LL;
	a = a%m;
	while(b){
		if(b&1) res = mul(res,a,m);
		b >>= 1;
		a = mul(a,a,m);
	}
	return res;
}

ll fastexp(ll a, ll b){
	ll res = 1LL;
	while(b){
		if(b&1) res = res*a;
		b >>= 1;
		a *= a;
	}
	return res;
}

int gcdExtendido(int a, int b, int *x, int *y){
	if(a == 0){
		*x = 0;
		*y = 1;
		return b;
	}
	int x1, y1;
	int gcd = gcdExtendido(b%a,a,&x1,&y1);
	
	*x = y1-(b/a)*x1;
	*y = x1;
	return gcd;
}

int modInverso(int a, int m){
	int x, y;
	int g = gcdExtendido(a,m,&x,&y);
	if(g!=1) return -1;
	else return (x%m + m)%m;
}

/****************************************
*************P*L*A*N*T*I*L*L*A************
*****************************************/

const int N = 10000+5;
const int inf = 1<<30;

int n;
int k;
int r;
vi G[N];
vi W[N];
int temp1[N];
int temp2[N];
int subtree[N];
int memo[N][N][2];

void DP(int u, int p = 0){
	subtree[u] = 1;
	for(int i=0; i<G[u].size(); i++){
		int v = G[u][i];
		int w = W[u][i];
		if(v == p) continue;
		DP(v, u);
		fill(temp1, temp1 + k + 1, inf);
		fill(temp2, temp2 + k + 1, inf);
		temp1[0] = temp2[0] = temp1[1] = temp2[1] = 0;
		for(int s1 = 0; s1 <= min(subtree[u], k); s1++){
			for(int s2 = 0; s2 <= subtree[v] and s1 + s2 <= k; s2++){
				temp1[s1 + s2] = min(temp1[s1 + s2], memo[u][s1][0] + 2 * w * (s2 > 0) + memo[v][s2][0]);
				temp2[s1 + s2] = min(temp2[s1 + s2], memo[u][s1][0] + w * (s2 > 0) + memo[v][s2][1]);
				temp2[s1 + s2] = min(temp2[s1 + s2], memo[u][s1][1] + 2 * w * (s2 > 0) + memo[v][s2][0]);
			}
		}
		subtree[u] += subtree[v];
		for(int i = 0; i <= min(k, subtree[u]); i++){
			memo[u][i][0] = temp1[i];
			memo[u][i][1] = temp2[i];
		}
	}
}

int main(){
	ri3(n,k,r);
	for(int i=1; i<n; i++){
		int u, v, w;
		ri3(u,v,w);
		G[u].emplace_back(v);
		G[v].emplace_back(u);
		W[u].emplace_back(w);
		W[v].emplace_back(w);
	}
	DP(r);
	printf("%d\n",min(memo[r][k][0], memo[r][k][1]));
	return 0;
}

Compilation message

museum.cpp: In function 'void DP(int, int)':
museum.cpp:119:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<G[u].size(); i++){
               ~^~~~~~~~~~~~
museum.cpp: In function 'int main()':
museum.cpp:8:25: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 #define ri3(x,y,z) scanf("%d %d %d",&(x),&(y),&(z))
                    ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
museum.cpp:143:2: note: in expansion of macro 'ri3'
  ri3(n,k,r);
  ^~~
museum.cpp:8:25: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 #define ri3(x,y,z) scanf("%d %d %d",&(x),&(y),&(z))
                    ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
museum.cpp:146:3: note: in expansion of macro 'ri3'
   ri3(u,v,w);
   ^~~
# Verdict Execution time Memory Grader output
1 Correct 5 ms 768 KB Output is correct
2 Correct 5 ms 768 KB Output is correct
3 Correct 5 ms 896 KB Output is correct
4 Correct 5 ms 896 KB Output is correct
5 Correct 5 ms 768 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 38 ms 28408 KB Output is correct
2 Correct 38 ms 28416 KB Output is correct
3 Correct 44 ms 34844 KB Output is correct
4 Correct 42 ms 33272 KB Output is correct
5 Correct 40 ms 32120 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 38 ms 28408 KB Output is correct
2 Correct 38 ms 28416 KB Output is correct
3 Correct 44 ms 34844 KB Output is correct
4 Correct 42 ms 33272 KB Output is correct
5 Correct 40 ms 32120 KB Output is correct
6 Correct 35 ms 23552 KB Output is correct
7 Correct 46 ms 33144 KB Output is correct
8 Correct 28 ms 3200 KB Output is correct
9 Correct 29 ms 3320 KB Output is correct
10 Correct 29 ms 3708 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 768 KB Output is correct
2 Correct 5 ms 768 KB Output is correct
3 Correct 5 ms 896 KB Output is correct
4 Correct 5 ms 896 KB Output is correct
5 Correct 5 ms 768 KB Output is correct
6 Correct 38 ms 28408 KB Output is correct
7 Correct 38 ms 28416 KB Output is correct
8 Correct 44 ms 34844 KB Output is correct
9 Correct 42 ms 33272 KB Output is correct
10 Correct 40 ms 32120 KB Output is correct
11 Correct 35 ms 23552 KB Output is correct
12 Correct 46 ms 33144 KB Output is correct
13 Correct 28 ms 3200 KB Output is correct
14 Correct 29 ms 3320 KB Output is correct
15 Correct 29 ms 3708 KB Output is correct
16 Correct 81 ms 28920 KB Output is correct
17 Correct 234 ms 29560 KB Output is correct
18 Correct 100 ms 45304 KB Output is correct
19 Correct 114 ms 3308 KB Output is correct
20 Correct 70 ms 4800 KB Output is correct
21 Correct 402 ms 106872 KB Output is correct
22 Correct 322 ms 29816 KB Output is correct
23 Correct 479 ms 3536 KB Output is correct
24 Correct 317 ms 5368 KB Output is correct
25 Correct 468 ms 170616 KB Output is correct