Submission #1482122


Source Code Expand

#include<bits/stdc++.h>
using namespace std;

struct LCA{
	vector<vector<int> > g;
	const int MAX_LOG = 22;
	vector<vector<int> > lcc;
	vector<int> dep;
	vector<int> myr;
private:
	void init2(){
		int n = g.size();
		for (int i = 0; i + 1 < MAX_LOG; i++){
			for (int j = 0; j < n; j++){
				if (lcc[i][j] == -1){
					lcc[i + 1][j] = -1;
					continue;
				}
				lcc[i + 1][j] = lcc[i][lcc[i][j]];
			}
		}
	}
public:
	int lca(int a, int b){
		if (dep[a] < dep[b]){
			swap(a, b);
		}
		for (int i = 0; i < MAX_LOG; i++){
			if (((dep[a] - dep[b]) >> i) & 1){
				a = lcc[i][a];
			}
		}
		if (a == b){
			return a;
		}
		for (int i = MAX_LOG - 1; i >= 0; i--){
			if (lcc[i][a] != lcc[i][b]){
				a = lcc[i][a];
				b = lcc[i][b];
			}
		}
		return lcc[0][a];
	}
private:
	int flag_r;
	inline void dfs(int b, int pr = -1, int d = 0){
		for (auto &i : g[b]){
			if (i == pr)continue;
			dfs(i, b, d + 1);
		}
		dep[b] = d;
		lcc[0][b] = pr;
		myr[b] = flag_r;
	}
public:

	void init(vector<vector<int> > &tree, int root = 0){
		g = tree;
		myr.resize(tree.size(), -1);
		flag_r = root;
		lcc.resize(MAX_LOG, vector<int>(g.size(), 0));
		dep.resize(g.size());
		dfs(root);
		init2();
	}
	void init(vector<vector<int> > &tree, vector<int> &root){
		g = tree;
		myr.resize(tree.size(), -1);
		lcc.resize(MAX_LOG, vector<int>(g.size(), 0));
		dep.resize(g.size());
		for (int &i : root){
			if (myr[i] == -1){
				flag_r = i;
				dfs(i);
			}
		}
		init2();
	}
	int dist(int a, int b){ 
		if (myr[a] != myr[b]){
			return -1;
		}
		int lc = lca(a, b);
		return dep[a] + dep[b] - 2 * dep[lc];
	}
};

#define MAX 200002

int n;

int x;
int y;

vector<vector<int> > sigma;
vector<vector<int> > sugim;

LCA sigmaL;
LCA sugimL;

bool win[MAX];

vector<vector<int> > vv;
queue<int> q;
vector<int> ord;
bool vis[MAX];

struct UF{
	vector<int> belong;
	vector<int> size;
	void resize(int n){
		belong.assign(n + 1, -1);
		size.assign(n + 1, 1);
	}
	inline int root(int b){
		if (belong[b] == -1){
			return b;
		}
		belong[b] = root(belong[b]);
		return belong[b];
	}
	void merge(int a, int b){
		a = root(a);
		b = root(b);
		if (a == b)return;
		belong[a] = b;
		size[b] += size[a];
	}
};
UF uf;

int main(){
	cin >> n;
	uf.resize(n);
	cin >> x >> y;
	sigma.resize(n,vector<int>());
	sugim = sigma; 
	vv = sigma;
	for (int i = 1; i < n; i++){
		int a, b;
		scanf("%d%d", &a, &b);
		a--;
		b--;
		sigma[a].push_back(b);
		sigma[b].push_back(a);
	}
	for (int i = 1; i < n; i++){
		int a, b;
		scanf("%d%d", &a, &b);
		a--;
		b--;
		sugim[a].push_back(b);
		sugim[b].push_back(a);
	}
	x--;
	y--;
	sugimL.init(sugim,y);
	for (int i = 0; i < n; i++){
		for (int &j : sigma[i]){
			if (i > j)continue;
			int d = sugimL.dist(i, j);
			if (d > 2){
				win[i] = true;
				win[j] = true;
				continue;
			}
			else{
				int ll = sugimL.lca(i, j);
				uf.merge(i, ll);
				uf.merge(j, ll);
			}
		}
	}
	sigmaL.init(sigma, y);
	for (int i = 0; i < n; i++){
		if (win[i]){
			int a = x;
			int b = i;
			if (uf.root(a)!=uf.root(b)){
				continue;
			}
			int lc = sugimL.lca(a, b);
			int tim = sigmaL.dist(a, lc);
			int tim2 = sugimL.dist(lc, y);
			if (tim == -1){
				continue;
			}
			if (tim < tim2){
				puts("-1");
				return 0;
			}
		}
	}
	int ans = 0;
	for (int i = 0; i < n; i++){
		if (win[i] == false){
			int a = x;
			int b = i;
			if (uf.root(a)!= uf.root(b) ){
				continue;
			}
			int lc = sugimL.lca(a, b);
			int tim = sigmaL.dist(a, lc);
			int tim2 = sugimL.dist(lc, y);
			int cost = sigmaL.dist(a, b);
			if (tim > tim2){
				continue;
			}
			if (tim == tim2){
				if (b == lc){
					ans = max(ans, cost);
				}
			}
			if (tim < tim2){
				ans = max(ans, cost + tim2 - tim);
			}
		}
	}
	cout << 2*ans << endl;
	return 0;
}

Submission Info

Submission Time
Task E - Sugigma: The Showdown
User Kmcode
Language C++14 (GCC 5.4.1)
Score 0
Code Size 3950 Byte
Status WA
Exec Time 629 ms
Memory 94324 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:141:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &a, &b);
                        ^
./Main.cpp:149:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &a, &b);
                        ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 1400
Status
AC × 5
AC × 102
WA × 1
Set Name Test Cases
Sample example0, example1, example2, example3, example4
All doublestar0, doublestar1, doublestar2, doublestar3, doublestar4, doublestar5, doublestar6, doublestar7, example0, example1, example2, example3, example4, giri0, giri1, giri2, giri3, giri4, giri5, giri6, giri7, giri8, giri9, maxrand0, maxrand1, maxrand2, maxrand3, maxrand4, maxrand5, maxrand6, maxrand7, maxrand8, maxrand9, narashi0, narashi1, narashi2, narashi3, narashi4, narashi5, narashi6, narashi7, narashi8, narashi9, ok0, ok1, ok2, ok3, ok4, ok5, ok6, ok7, ok8, ok9, ouh0, ouh1, ouh2, ouh3, ouh4, ouh5, ouh6, ouh7, ouh8, ouh9, same0, same1, same2, same3, same4, same5, same6, same7, same8, same9, sameline0, sameline1, sameline2, sameline3, sameline4, sameline5, sameline6, sameline7, sameline8, sameline9, star0, star1, star2, star3, star4, star5, star6, star7, star8, star9, supersmall0, supersmall1, supersmall2, supersmall3, supersmall4, supersmall5, supersmall6, supersmall7, supersmall8, supersmall9
Case Name Status Exec Time Memory
doublestar0 AC 394 ms 87036 KB
doublestar1 AC 284 ms 82852 KB
doublestar2 AC 291 ms 85644 KB
doublestar3 AC 262 ms 81964 KB
doublestar4 AC 280 ms 88436 KB
doublestar5 AC 307 ms 88816 KB
doublestar6 AC 278 ms 82092 KB
doublestar7 AC 286 ms 82724 KB
example0 AC 1 ms 256 KB
example1 AC 1 ms 256 KB
example2 AC 1 ms 256 KB
example3 AC 1 ms 256 KB
example4 AC 1 ms 256 KB
giri0 AC 258 ms 88696 KB
giri1 AC 587 ms 84880 KB
giri2 AC 259 ms 86020 KB
giri3 AC 598 ms 84880 KB
giri4 AC 612 ms 85640 KB
giri5 AC 629 ms 88304 KB
giri6 AC 618 ms 87672 KB
giri7 AC 606 ms 86024 KB
giri8 AC 267 ms 86656 KB
giri9 AC 259 ms 87164 KB
maxrand0 AC 372 ms 88308 KB
maxrand1 AC 352 ms 87164 KB
maxrand2 AC 362 ms 88560 KB
maxrand3 AC 346 ms 86276 KB
maxrand4 AC 340 ms 84628 KB
maxrand5 AC 340 ms 85008 KB
maxrand6 AC 341 ms 84756 KB
maxrand7 AC 352 ms 87164 KB
maxrand8 AC 338 ms 84500 KB
maxrand9 AC 387 ms 86784 KB
narashi0 AC 528 ms 83864 KB
narashi1 AC 545 ms 84496 KB
narashi2 AC 506 ms 84120 KB
narashi3 AC 528 ms 85896 KB
narashi4 AC 553 ms 87288 KB
narashi5 AC 527 ms 86404 KB
narashi6 AC 579 ms 86400 KB
narashi7 AC 542 ms 88052 KB
narashi8 AC 558 ms 87796 KB
narashi9 AC 537 ms 84752 KB
ok0 AC 281 ms 91396 KB
ok1 AC 286 ms 93180 KB
ok2 AC 545 ms 90748 KB
ok3 AC 289 ms 94324 KB
ok4 AC 268 ms 87948 KB
ok5 AC 291 ms 91888 KB
ok6 AC 281 ms 90880 KB
ok7 AC 274 ms 87568 KB
ok8 AC 538 ms 93424 KB
ok9 AC 280 ms 89360 KB
ouh0 AC 345 ms 85416 KB
ouh1 AC 258 ms 87948 KB
ouh2 AC 358 ms 82620 KB
ouh3 AC 263 ms 88456 KB
ouh4 AC 388 ms 87948 KB
ouh5 AC 267 ms 87460 KB
ouh6 AC 360 ms 89876 KB
ouh7 AC 262 ms 85792 KB
ouh8 AC 392 ms 91004 KB
ouh9 AC 273 ms 90764 KB
same0 AC 476 ms 86528 KB
same1 AC 444 ms 85640 KB
same2 AC 403 ms 87924 KB
same3 AC 415 ms 87796 KB
same4 AC 387 ms 84500 KB
same5 AC 421 ms 84752 KB
same6 AC 442 ms 86148 KB
same7 AC 433 ms 84880 KB
same8 AC 362 ms 84120 KB
same9 AC 443 ms 87416 KB
sameline0 AC 529 ms 90512 KB
sameline1 AC 523 ms 94064 KB
sameline2 AC 466 ms 89736 KB
sameline3 AC 578 ms 90760 KB
sameline4 AC 467 ms 93048 KB
sameline5 AC 525 ms 91144 KB
sameline6 AC 558 ms 88844 KB
sameline7 AC 510 ms 91904 KB
sameline8 AC 489 ms 92148 KB
sameline9 AC 550 ms 91380 KB
star0 AC 270 ms 87808 KB
star1 AC 245 ms 87428 KB
star2 AC 251 ms 87808 KB
star3 AC 281 ms 87300 KB
star4 AC 276 ms 88188 KB
star5 AC 577 ms 89076 KB
star6 AC 255 ms 88824 KB
star7 AC 283 ms 87680 KB
star8 AC 317 ms 89476 KB
star9 AC 258 ms 90220 KB
supersmall0 AC 1 ms 256 KB
supersmall1 AC 1 ms 256 KB
supersmall2 WA 1 ms 256 KB
supersmall3 AC 1 ms 256 KB
supersmall4 AC 1 ms 256 KB
supersmall5 AC 1 ms 256 KB
supersmall6 AC 1 ms 256 KB
supersmall7 AC 1 ms 256 KB
supersmall8 AC 1 ms 256 KB
supersmall9 AC 1 ms 256 KB