社区讨论

迷惑(本地样例未过,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 条回复,欢迎继续交流。

正在加载回复...