RiOI 2B 求调 15分·
  • 板块学术版
  • 楼主FastingRabble
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/1/15 19:18
  • 上次更新2023/10/24 04:06:08
查看原帖
RiOI 2B 求调 15分·
147761
FastingRabble楼主2023/1/15 19:18
#include<bits/stdc++.h>
using namespace std;
#define open(x) freopen(x ".in", "r", stdin);freopen(x ".out", "w", stdout);

inline int read(){int f=1;int x=0;char c=getchar();while(c<'0'||c>'9'){if(c=='-'){f=-f;}c=getchar();}while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}return x*f;}
inline void wr(int x){if(x<0){putchar('-');x=-x;}if(x>9){wr(x/10);}putchar(x%10+'0');}

int n,q;
struct node{
	int nex,to;
}a[500005];
int used[500050];
int dis[500050];
int idxx[500050];
int head[500050];
int pre[500050];
int ct[500050];
set<int> s;

int id = 1;
int cnt;

inline void addedge(int st,int to){
	a[++cnt].to=to;
	a[cnt].nex=head[st];
	head[st]=cnt;
	return;
}

inline void dfs(int x,int fa){
	if(used[x] == 1){
		id = x;
		return;
	}
	pre[x] = fa;
	used[x] = 1;
	for(int i=head[x];i;i=a[i].nex){
		int v = a[i].to;
		if(v==fa) continue;
		dfs(v,x);
	}
	return;
}

inline void dfs_fa(int x,int fa,int root,int dep){
	dis[x] = dep;
	idxx[x] = root;
	for(int i=head[x];i;i=a[i].nex){
		int v = a[i].to;
		if(v == fa ||  (s.find(v) != s.end())) continue;
		dfs_fa(v,x,root,dep+1);
	}
	return;
}

signed main(){
	n = read();
	q = read();
	for(int i=1;i<=n;++i){
		int x,y;
		x = read();
		y = read();
		addedge(x,y);
		addedge(y,x);
	}
	dfs(1,0);
	int kkk = 0;
	for(int i=id;i;i=pre[i]){
		ct[i] = ++kkk;
	} 
	for(int i=id;i;i=pre[i]){
		s.insert(i);
	}
	for(int i=1;i<=n;++i){
		if(s.find(i) != s.end()){
			dfs_fa(i,0,i,0);
		}
	}
	//
//	for(int i=1;i<=n;++i){
//		cout<<ct[i]<<' ';
//	}
//	cout<<endl;
	//
	while(q--){
		int x , y;
		x = read();
		y = read();
		if(x == y){
			puts("Deception");
			continue;
		}
		else if(s.find(x) != s.end()){
			puts("Survive");
			continue;
		}
		else{
			int A = dis[x];
			int ida = idxx[x];
			int idb = idxx[y];
			int maxa = max(ct[ida],ct[idb]);
			int mina = min(ct[ida],ct[idb]);
			int base_up = min(maxa - mina , kkk - maxa + mina);
			int B = dis[y] + base_up; 
			if(A >= B) puts("Deception");
			else puts("Survive");
			continue;
		}
	}
	return 0;
} 
2023/1/15 19:18
加载中...