社区讨论
迷惑(本地样例未过,butAC)
P5836[USACO19DEC] Milk Visits S参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhjo3bop
- 此快照首次捕获于
- 2025/11/04 05:43 4 个月前
- 此快照最后确认于
- 2025/11/04 05:43 4 个月前
本地Dev-C++运行的时候,样例输出0
但是提交测评后AC,代码如下:
CPP#include<iostream>
#include<cstdio>
#include<algorithm>
#include<utility>
#include<cmath>
using namespace std;
const int N=2e5+5;
pair<int,int> p[N];
struct edge{ int next,to;}e[N];
int n,m,head[N],idx,fa[N][30],dep[N];
char t[N];//tree
inline void add(int u,int v){ e[++idx]={head[u],v}; head[u]=idx; }
void dfs(int u,int father)
{
p[u].first=p[father].first+(t[u]=='H');
p[u].second=p[father].second+(t[u]=='G');
dep[u]=dep[father]+1;
fa[u][0]=father;
for(int i=1;(1<<i)<=n;i++)
fa[u][i]=fa[fa[u][i-1]][i-1];
for(int i=head[u];i;i=e[i].next)
if(e[i].to!=father) dfs(e[i].to,u);
}
inline int LCA(int x,int y)
{
int t=(int)log2(n);
if(dep[x]<dep[y]) swap(x,y);
for(int i=t;i>=0;i--)
if(dep[x]-(1<<i)>=dep[y])
x=fa[x][i];
if(x==y) return x;
for(int i=t;i>=0;i--)
if(fa[x][i]!=fa[y][i])
x=fa[x][i],y=fa[y][i];
return fa[x][0];
}
int main()
{
scanf("%d%d",&n,&m);
scanf(" %s",t+1);
for(int i=1;i<n;i++)
{
int x,y; scanf("%d%d",&x,&y);
add(x,y),add(y,x);
}
dfs(1,0);
for(int i=1;i<=m;i++)
{
int a,b; scanf("%d%d",&a,&b);
char c; scanf(" %c",&c);
int lca=LCA(a,b);
int len_h=p[a].first+p[b].first-((p[lca].first)<<1)+(t[lca]=='H');
int len_g=p[a].second+p[b].second-((p[lca].second)<<1)+(t[lca]=='G');
if(c=='H')
{
if(len_h) putchar('1');
else putchar('0');
}
else
{
if(len_g) putchar('1');
else putchar('0');
}
}
return 0;
}
还请各路神犇不吝赐教!
回复
共 1 条回复,欢迎继续交流。
正在加载回复...