답안 #767565

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
767565 2023-06-26T21:00:53 Z bLIC Museum (CEOI17_museum) C++17
100 / 100
472 ms 784476 KB
/**
 *  Author: Anil Byar
**/

#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>

// using namespace __gnu_pbds;
using namespace std;

// template<class T>
// using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;



#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define sz(x) (int)(x).size()
#define uniq(v) v.erase(unique(all(v)), v.end())
#define ft first
#define sd second
#define pb push_back
#define eb emplace_back

// Source: https://codeforces.com/blog/entry/68809
// { start
void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '"' << x << '"';}
void __print(const string &x) {cerr << '"' << x << '"';}
void __print(bool x) {cerr << (x ? "true" : "false");}

template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifndef ONLINE_JUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif
// } end


typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<pii> vii;
typedef vector<ll> vl;
typedef vector<pll> vll;
typedef vector<vi> vvi;
typedef vector<vii> vvii;
typedef vector<vl> vvl;

#define dbg if(0)

const ll MOD = 1e9+7;
const ll MOD9 = 998244353;
const ll INFLL = 1e18+5;
const int INF = 1e9;

void printbit(int x, int len) {string s="\n";while(len--){s=((x%2)?'1':'0')+s;x/=2;} cout<<s;}
ll power(ll x, ll y, ll mod){if (y==0) return 1;ll ret = power(x, y/2, mod);ret *= ret;ret%=mod;if (y&1) ret *= x;return ret%mod;}
ll modinv(ll x, ll mod = MOD) {return power(x, mod-2, mod);}

template<class T>
istream& operator>>(istream&in, vector<T>&v){
	for (T& x:v) in>>x;
	return in;
}
template<class T>
ostream& operator<<(ostream&out, vector<T>&v){
	for (T& x:v) out<<x<<' ';
	cout<<'\n';
	return out;
}
// use ?: with brackets (?:)
// check for overflow
// think about dp
// Read the statement carefully

const int N = 10001;

vii adj[N];
int n, k, x;
int dp[N][2][N];
int stree[N];

void dfs(int node, int par){
	dp[node][0][0] = dp[node][1][0] = 0;
	dp[node][0][1] = dp[node][1][1] = 0;
	// int tmp[2][N];
	// memset(tmp, 63, sizeof(tmp));
	// tmp[0][0] = tmp[1][0] = 0;
	// tmp[0][1] = tmp[1][1] = 0;
	stree[node] = 1;
	int p = sz(adj[node]);

	for (int i = 0;i<sz(adj[node]);i++){
		auto z = adj[node][i];
		// assert(find(all(adj[z.ft]), make_pair(node, z.sd))!=adj[z.ft].end());
		adj[z.ft].erase(find(all(adj[z.ft]), make_pair(node, z.sd)));
		dfs(z.ft, node);

		for (int j = stree[node];j>=0;j--){
			for (int l = stree[z.ft];l>=0;l--){
				dp[node][0][j+l] = min(dp[node][0][j+l], min(dp[node][0][j]+dp[z.ft][1][l] + 2*z.sd, dp[node][1][j]+dp[z.ft][0][l]+z.sd));
				dp[node][1][j+l] = min(dp[node][1][j+l], dp[node][1][j]+dp[z.ft][1][l]+2*z.sd);
				// int val = min(tmp[0][j]+dp[z.ft][1][l] + 2*z.sd, tmp[1][j]+dp[z.ft][0][l]+z.sd);
				// debug(node, j, l, val);
			}
		}
		stree[node] += stree[z.ft];
	}
	// for (int i = 0;i<=stree[node];i++) {
	// 	debug(node, i, dp[node][0][i], dp[node][1][i]);
	// }
}

void solve(){
	cin>>n>>k>>x;
	for (int i = 0;i<n-1;i++){
		int u, v, w;cin>>u>>v>>w;
		adj[u].eb(v, w);
		adj[v].eb(u, w);
	}
	memset(dp, 63, sizeof(dp));
	dfs(x, -1);
	cout<<dp[x][0][k];
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);


#define ONLINE_JUDGE
#ifndef ONLINE_JUDGE
	freopen("input.in", "r", stdin);
	freopen("output.out", "w", stdout);
	freopen("debug.dbg", "w", stderr);
	int tt = clock();
#endif

	int t=1, i = 1;
	// cin>>t;
	while(t--){
		// cout<<"Case #"<<i++<<": ";
		solve();
		cout<<'\n';
	}
#ifndef ONLINE_JUDGE
	cerr << "TIME = " << (float)(clock() - tt)/CLOCKS_PER_SEC << endl;
	tt = clock();
#endif
}

Compilation message

museum.cpp: In function 'void dfs(int, int)':
museum.cpp:110:6: warning: unused variable 'p' [-Wunused-variable]
  110 |  int p = sz(adj[node]);
      |      ^
museum.cpp: In function 'int main()':
museum.cpp:159:11: warning: unused variable 'i' [-Wunused-variable]
  159 |  int t=1, i = 1;
      |           ^
# 결과 실행 시간 메모리 Grader output
1 Correct 285 ms 783388 KB Output is correct
2 Correct 239 ms 783464 KB Output is correct
3 Correct 231 ms 783428 KB Output is correct
4 Correct 247 ms 783404 KB Output is correct
5 Correct 231 ms 783416 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 349 ms 783920 KB Output is correct
2 Correct 338 ms 783916 KB Output is correct
3 Correct 378 ms 784232 KB Output is correct
4 Correct 355 ms 784104 KB Output is correct
5 Correct 356 ms 783820 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 349 ms 783920 KB Output is correct
2 Correct 338 ms 783916 KB Output is correct
3 Correct 378 ms 784232 KB Output is correct
4 Correct 355 ms 784104 KB Output is correct
5 Correct 356 ms 783820 KB Output is correct
6 Correct 342 ms 783956 KB Output is correct
7 Correct 364 ms 784136 KB Output is correct
8 Correct 472 ms 783868 KB Output is correct
9 Correct 420 ms 783940 KB Output is correct
10 Correct 353 ms 783980 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 285 ms 783388 KB Output is correct
2 Correct 239 ms 783464 KB Output is correct
3 Correct 231 ms 783428 KB Output is correct
4 Correct 247 ms 783404 KB Output is correct
5 Correct 231 ms 783416 KB Output is correct
6 Correct 349 ms 783920 KB Output is correct
7 Correct 338 ms 783916 KB Output is correct
8 Correct 378 ms 784232 KB Output is correct
9 Correct 355 ms 784104 KB Output is correct
10 Correct 356 ms 783820 KB Output is correct
11 Correct 342 ms 783956 KB Output is correct
12 Correct 364 ms 784136 KB Output is correct
13 Correct 472 ms 783868 KB Output is correct
14 Correct 420 ms 783940 KB Output is correct
15 Correct 353 ms 783980 KB Output is correct
16 Correct 345 ms 783984 KB Output is correct
17 Correct 424 ms 784060 KB Output is correct
18 Correct 355 ms 784080 KB Output is correct
19 Correct 435 ms 784176 KB Output is correct
20 Correct 340 ms 784096 KB Output is correct
21 Correct 367 ms 784276 KB Output is correct
22 Correct 336 ms 784052 KB Output is correct
23 Correct 435 ms 784068 KB Output is correct
24 Correct 389 ms 784076 KB Output is correct
25 Correct 391 ms 784476 KB Output is correct