直接对比两个小紫/2的距离和小红的距离谁近用手模拟一下根本不对而且很难理解,一个新的思路,小紫可以每次操作和小红少一个距离,每个叶子节点的路径算出小紫和小红的距离,在小紫到达终点之前(小红到叶子节点的距离减一)靠近小红就行了 #include<bits/stdc++.h> using namespace std; vector<vector>g; vectorred; vectorpurple; vectorvis; int n;int a,b; void dfs(int index,vector&step){ for(int i=0;i<g[index].size();i++){ int t=g[index][i]; if(vis[t]==1) continue; step[t]=step[index]+1; vis[t]=1; dfs(t,step); vis[t]=0; } } void solve(){ cin>>n; g.assign(n+1,vector()); red.assign(n+1,0); purple.assign(n+1,0); vis.assign(n+1,0); cin>>a>>b; for(int i=0;i<n-1;i++){ int c,d; cin>>c>>d; g[c].push_back(d); g[d].push_back(c); } vis[a]=1; dfs(a,red); vis[a]=0; vis[b]=1; dfs(b,purple); vis[b]=0; for(int i=1;i<=n;i++){ if(g[i].size()==1){ if(red[i]<=purple[i]-red[i]) { cout<<"red"<<endl; return; } } } cout<<"purple"<<endl; return ; } int main(){ int t; cin>>t; while(t--){ solve(); }
}

京公网安备 11010502036488号