QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#526107#5015. 树cqbzdjCompile Error//C++142.5kb2024-08-21 11:08:272024-08-21 11:08:27

Judging History

你现在查看的是最新测评结果

  • [2024-08-21 11:08:27]
  • 评测
  • [2024-08-21 11:08:27]
  • 提交

answer

#include"tree.h"
#include<bits/stdc++.h>
#define LL long long
#define mes(s, x) memset(s, x, sizeof s)
#define Maxn 1005
#define inf 0x3f3f3f3f
#define pr pair<int, int>
#define fi first
#define sd second
using namespace std;
// inline LL read(){char c;c = getchar();while(!(('0' <= c && c <= '9') || c == '-')) c = getchar();bool flag = 0;if(c == '-'){flag = 1;c = getchar();}LL tot = 0;while('0' <= c && c <= '9'){tot = 10 * tot + c - '0';c = getchar();}return flag ? -tot : tot;}
// inline char gc(){char c = getchar();while(c == ' ' || c == '\n' || c == '\r') c = getchar();return c;}
// int ask(int u, vector <int> v){
// 	printf("%d:", u);
// 	for(int i: v) printf("%d ", i);
// 	puts("");
// 	return read();
// }
// void answer(int u, int v){
// 	printf("!%d %d\n", u, v);
// }
vector<int> g[Maxn];
int dep[Maxn], f[Maxn];
int dis(int i, int j){
	int x = dep[i] + dep[j];
	if(dep[i] < dep[j]) swap(i, j);
	while(dep[i] > dep[j]) i = f[i];
	while(i != j) i = f[i], j = f[j];
	return x - 2 * dep[i];
}
void solve(vector<int> fa, vector<int> son){
	if(son.size() == 0) return;
	if(fa.size() == 1){
		for(int i: son){
			answer(fa[0], i);
			f[i] = fa[0];
		}
		return;
	}
	int mid = fa.size() >> 1;
	vector<int> tmp;
	for(int i = 0; i < mid; i++) tmp.push_back(fa[i]);
	vector<pr> vec1(fa.size()), vec2(son.size());
	for(int i = 0; i < fa.size(); i++){
		for(int j = 0; j < mid; j++) vec1[i].fi += dis(fa[i], fa[j]) + 1;
		vec1[i].sd = fa[i];
	}
	for(int i = 0; i < son.size(); i++) vec2[i] = {ask(son[i], tmp), son[i]};
	sort(vec1.begin(), vec1.end());
	sort(vec2.begin(), vec2.end());
	int r1, r2;
	for(int i = 0, j = 0; i < fa.size(); i = r1 + 1, j = r2 + 1){
		r1 = i;
		vector<int> x, y;
		x.push_back(vec1[i].sd);
		while(r1 + 1 < vec1.size() && vec1[i].fi == vec1[r1 + 1].fi) x.push_back(vec1[++r1].sd);
		r2 = j - 1;
		while(r2 + 1 < vec2.size() && vec1[i].fi == vec2[r2 + 1].fi) y.push_back(vec2[++r2].sd);
		solve(x, y);
	}
}
void solver(int n,int A,int B){
// int main(){
	// #ifndef ONLINE_JUDGE
	// 	freopen("in","r",stdin);
	// 	freopen("out","w",stdout);
	// #endif
	srand(time(0));
	// int n = read(), A = read(), B = read(), rt;
	int rt = rand() % n + 1;
	vector<int> tmp;
	tmp.push_back(rt);
	for(int i = 1; i <= n; i++){
		if(i == rt) continue;
		g[dep[i] = ask(i, tmp)].push_back(i);
	}
	for(int i: g[1]) answer(rt, i);
	for(int i = 2; i < n; i++) solve(g[i - 1], g[i]);
	return 0;
}
/*
g++ tmp.cpp -o tmp.exe -std=c++14 -O2 "-Wl,-stack=102400000"
./tmp.exe

*/

详细

implementer.cpp: In function ‘void regduj260135279::init()’:
implementer.cpp:32:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   32 |                 scanf("%d",&n);
      |                 ~~~~~^~~~~~~~~
implementer.cpp:45:30: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   45 |                         scanf("%d%d",&u,&v);
      |                         ~~~~~^~~~~~~~~~~~~~
answer.code: In function ‘void solver(int, int, int)’:
answer.code:79:16: error: return-statement with a value, in function returning ‘void’ [-fpermissive]
   79 |         return 0;
      |                ^