QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#800655#7338. Education NightmarehicgnliawAC ✓585ms25808kbC++141.6kb2024-12-06 14:01:092024-12-06 14:01:10

Judging History

This is the latest submission verdict.

  • [2024-12-06 14:01:10]
  • Judged
  • Verdict: AC
  • Time: 585ms
  • Memory: 25808kb
  • [2024-12-06 14:01:09]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
inline int read(){
	int s = 0;char ch = getchar();
	while(!isdigit(ch))ch = getchar();
	while(isdigit(ch)){s = (s<<1)+(s<<3)+ch-'0';ch = getchar();}
	return s;
}
int T,n,hd[N],ect,s,m,fa[N],odis,ans,dep[N],dis[N],mnd,mxd;
bool vis[N];
vector<int> vst[N];
struct E{
	int v,nt;
}e[2*N];
void add(int u,int v){
	e[ect].v = v;
	e[ect].nt = hd[u];
	hd[u] = ect++;
}
void dfs0(int p){
	for(int i = hd[p];i;i = e[i].nt){
		if(e[i].v!=fa[p]){
			dep[e[i].v] = dep[p]+1;
			fa[e[i].v] = p;
			dfs0(e[i].v);
		}
	}
}
void dfs1(int p,int fr){
	bool fg = 0;
	for(int i = hd[p];i;i = e[i].nt){
		if(e[i].v!=fr){
			fg = 1;
			dis[e[i].v] = dis[p]+1;
			dfs1(e[i].v,p);
		}
	}
	mxd = max(mxd,dis[p]);
	if(!fg)vst[dis[p]].emplace_back(p);
}
int tag(int p){
	int res = 0;
	mnd = min(mnd,dis[p]-dep[p]);
	while(!vis[p]){
		if(p==m)return -1;
		vis[p] = 1;
		res++;
		p = fa[p];
	}
	return res<<1;
}
int main(){
	T = read();
	while(T--){
		n = read();s = read();m = read();
		memset(hd,0,4*n+4);
		memset(vis,0,n+1);
		ect = 2;
		vis[s] = 1;
		dep[s] = dis[m] = odis = mxd = 0;
		for(int i = 1,u,v;i<n;i++){
			u = read();v = read();
			add(u,v);add(v,u);
			vst[i].clear();
		}
		fa[s] = 0;//!!!!!
		dfs0(s);dfs1(m,0);
		mnd = dis[s];
		ans = dep[m]+mxd;
//		for(int i = 1;i<=n;i++){
//			printf("%d %d\n",dis[i],dep[i]);
//		}
		for(int d = n-1,x = 0;d>0;d--){
			for(auto p:vst[d]){
				x = tag(p);
				if(~x)odis+=x;
				else break;
			}
			if(x==-1)break;
			ans = min(ans,odis+mnd+d-1);
		}
		printf("%d\n",ans);
	}
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 3ms
memory: 12056kb

input:

1
4 2 3
1 2
1 3
1 4

output:

4

result:

ok 1 number(s): "4"

Test #2:

score: 0
Accepted
time: 585ms
memory: 25808kb

input:

14966
15 13 8
7 14
7 10
5 3
1 3
15 3
1 13
9 5
7 2
6 13
10 11
13 8
5 10
5 12
14 4
16 14 9
16 11
14 9
8 15
14 15
13 10
6 11
3 2
9 5
6 7
10 6
6 8
1 5
15 4
10 2
11 12
100 49 58
67 43
55 34
84 42
3 74
84 54
20 6
86 83
88 51
2 99
4 78
91 64
14 59
82 38
91 44
24 12
12 2
39 19
43 46
5 80
41 35
80 97
79 8
47...

output:

9
8
63
12
3
9
131
8
119
10
13
95
7
76
121
4
85
2
111
7
121
132
107
69
7
117
0
96
91
6
108
90
7
9
4
97
70
94
13
3
3
10
10
12
8
5
103
115
90
5
84
130
3
6
1
114
11
137
84
4
1
132
99
8
1
3
4
13
5
88
104
123
82
5
9
127
85
12
86
11
5
4
8
5
9
4
9
64
8
105
68
2
124
83
1
108
2
1
9
78
6
121
9
0
9
13
87
0
4
9
...

result:

ok 14966 numbers