Submission #1756085


Source Code Expand

#include <bits/stdc++.h>
#define INF 1e+9
using namespace std;

typedef pair<int,int> P;

class RMQ{
	int n,seg,init;
	vector<P> dat;
public:
	RMQ(int siz,int def) : n(siz),init(def),seg(1){
		while(seg < n) seg *= 2;
		dat.resize(seg * 2 - 1);
		for(int i = 0;i < seg;i++) dat[i + seg - 1] = P(init,i);
		for(int i = seg - 2;i >= 0;i--) dat[i] = min(dat[i * 2 + 1],dat[i * 2 + 2]);
	}
	void update(int i,int x){
		i += seg - 1;
		dat[i] = P(x,i - seg + 1);
		while(i){
			i = (i - 1) / 2;
			dat[i] = min(dat[i * 2 + 1],dat[i * 2 + 2]); //do
		}
	}
	P get(int a = 0,int b = -1,int k = 0,int l = 0,int r = -1){
		if(b == -1) b = seg;
		if(r == -1) r = seg;
		if(b <= l || r <= a) return P(init,-1);
		if(a <= l && r <= b) return dat[k];
		return min(get(a,b,k * 2 + 1,l,(l + r) / 2),get(a,b,k * 2 + 2,(l + r) / 2,r)); //do
	}
};

class EulerTour{
	int cnt;
	public:
	vector<int> first,last,depth,line;
	vector<vector<int> > g;
	EulerTour(int n) : g(n),first(n),last(n),depth(n){}
	void add(int u, int v) {
		g[u].push_back(v);
		g[v].push_back(u);
	}
	void build(){
		cnt = 0;
		dfs(0,-1,0);
	}
	void dfs(int v,int par,int d){
		depth[v] = d;
		line.push_back(v);
		first[v] = cnt++;
		for(int next : g[v]){
			if(next == par) continue;
			dfs(next,v,d + 1);
			cnt++;
			line.push_back(v);
		}
	}
};


int main(){
	int n,q;
	cin >> n;
	EulerTour et(n);
	for(int i = 0;i < n - 1;i++){
		int x,y;
		cin >> x >> y; x--;y--;
		et.add(x,y);
	}
	et.build();
	RMQ rmq(et.line.size(),INF);
	for(int i = 0;i < et.line.size();i++) rmq.update(i,et.depth[et.line[i]]);
	cin >> q;
	for(int i = 0;i < q;i++){
		int x,y;
		cin >> x >> y; x--;y--;
		int p = rmq.get(min(et.first[x],et.first[y]),max(et.first[x],et.first[y]) + 1).first;
		cout << et.depth[x] + et.depth[y] - p * 2 + 1 << endl;
	}
	return 0;
}

Submission Info

Submission Time
Task D - 閉路
User hoget157
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1874 Byte
Status AC
Exec Time 388 ms
Memory 15476 KB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 30 / 30 70 / 70
Status
AC × 3
AC × 12
AC × 27
Set Name Test Cases
Sample subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt
Subtask1 subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt
Subtask2 subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt
Case Name Status Exec Time Memory
subtask0_sample01.txt AC 1 ms 256 KB
subtask0_sample02.txt AC 1 ms 256 KB
subtask0_sample03.txt AC 1 ms 256 KB
subtask1_01.txt AC 91 ms 14836 KB
subtask1_02.txt AC 91 ms 14836 KB
subtask1_03.txt AC 1 ms 256 KB
subtask1_04.txt AC 1 ms 256 KB
subtask1_05.txt AC 2 ms 384 KB
subtask1_06.txt AC 2 ms 384 KB
subtask1_07.txt AC 98 ms 12020 KB
subtask1_08.txt AC 106 ms 11896 KB
subtask1_09.txt AC 103 ms 11892 KB
subtask1_10.txt AC 101 ms 11892 KB
subtask1_11.txt AC 106 ms 11892 KB
subtask1_12.txt AC 97 ms 11892 KB
subtask2_01.txt AC 321 ms 15476 KB
subtask2_02.txt AC 337 ms 15476 KB
subtask2_03.txt AC 216 ms 384 KB
subtask2_04.txt AC 227 ms 512 KB
subtask2_05.txt AC 247 ms 640 KB
subtask2_06.txt AC 247 ms 768 KB
subtask2_07.txt AC 384 ms 12276 KB
subtask2_08.txt AC 388 ms 12280 KB
subtask2_09.txt AC 386 ms 12276 KB
subtask2_10.txt AC 381 ms 12276 KB
subtask2_11.txt AC 386 ms 12276 KB
subtask2_12.txt AC 388 ms 12276 KB