Submission #1327132

#TimeUsernameProblemLanguageResultExecution timeMemory
1327132nanaseyuzukiCollapse (JOI18_collapse)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pii pair<int, int>
#define all(a) a.begin(), a.end()
using namespace std;

#ifdef LOCAL
#include "C:\Users\Dell\Downloads\template\template\icpc-notebook\Utilities\debug.h"
#else
#define debug(...) 42
#endif

const int mn = 5e5 + 5, mod = 1e9 + 7, inf = 2e9;

int n, d[mn], up[mn][21], sz[mn], st[mn], ft[mn], timer_dfs = 0;
vector <int> a[mn];

void pre_dfs(int u, int p){
	sz[u] = 1;
	st[u] = ++ timer_dfs;
	for(auto v : a[u]){
		if(v == p) continue;
		d[v] = d[u] + 1;
		up[v][0] = u;
		pre_dfs(v, u);
		sz[u] += sz[v];
	}
	ft[u] = timer_dfs;
}

void build(){
	for(int j = 1; (1 << j) <= n; j++){
		for(int i = 1; i <= n; i++){
			up[i][j] = up[up[i][j - 1]][j - 1];
		}
	}
}

int lca(int u, int v){
	if(d[u] < d[v]) swap(u, v);
	int kc = d[u] - d[v];
	for(int i = 20; i >= 0; i--) if(kc & (1 << i)) u = up[u][i];
	if(u == v) return u;
	for(int i = 20; i >= 0; i--){
		if(up[u][i] != up[v][i]){
			u = up[u][i], v = up[v][i];
		}
	}
	return up[u][0];
}

int jump(int u, int v){
	int kc = d[v] - d[u] - 1;
	for(int i = 20; i >= 0; i--) if(kc & (1 << i)) v = up[v][i];
	return v;
}

int dist(int u, int v){
	return d[u] + d[v] - 2 * d[lca(u, v)];
}

namespace sub1{
	int ans[mn];

	void backtrack(){
		for(int mask = 0; mask < (1 << n); mask++){
			vector <int> candidate;
			for(int i = 0; i < n; i++){
				if(mask & (1 << i)) candidate.push_back(i + 1);
			}

			int min_val = inf, cnt = 0;
			for(int i = 1; i <= n; i++){
				int sum = 0;
				for(auto v : candidate) sum += dist(i, v);
				if(min_val > sum) min_val = sum, cnt = 1;
				else if(min_val == sum) cnt ++;
			}

			// debug(candidate, min_val, cnt);
			int num = __builtin_popcount(mask);
			ans[num] = max(ans[num], cnt);
		}

		for(int i = 1; i <= n; i++) cout << ans[i] << '\n';
	}
}

namespace sub2{
	int ans[mn];

	void sol(){
		fill(ans, ans + n + 1, 1);

		for(int u = 1; u <= n; u++){
			for(int v = 1; v <= n; v++){
				if(d[u] < d[v] || (d[u] == d[v] && u != v)){
					int cur_val;
					if(st[u] <= st[v] && st[v] <= ft[u]) cur_val = min(sz[v], n - sz[jump(u, v)]); 
					else cur_val = min(sz[u], sz[v]);
					ans[cur_val * 2] = max(ans[cur_val * 2], dist(u, v) + 1);
					debug(cur_val * 2, u, v, lca(u, v), dist(u, v));
				}
			}
		}

		for(int i = n - n % 2; i; i -= 2) ans[i] = max(ans[i], ans[i + 2]);
		for(int i = 1; i <= n; i++) cout << ans[i] << '\n';
	}
}

void solve() {
    cin >> n;
    for(int i = 1; i < n; i++){
    	int u, v; cin >> u >> v;
    	a[u].push_back(v);
    	a[v].push_back(u);
    }
    pre_dfs(1, 0); build();
    // if(n <= 16) sub1::backtrack();
    // else if (n <= 4000)
    sub2::sol();
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    #define task "Kawabata"
    if (fopen(task".INP", "r")) {
        freopen(task".INP", "r", stdin);
        freopen(task".OUT", "w", stdout);
    }
    int t = 1;
    // cin >> t;
    while (t--) solve();
    return 0;
}
// Don't wanna lose anymore T_T
// Never let me go - Kazuo Ishiguro

Compilation message (stderr)

collapse.cpp: In function 'int main()':
collapse.cpp:132:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  132 |         freopen(task".INP", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
collapse.cpp:133:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  133 |         freopen(task".OUT", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/cciEOHn8.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccyeilyf.o:collapse.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/cciEOHn8.o: in function `main':
grader.cpp:(.text.startup+0x259): undefined reference to `simulateCollapse(int, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status