日常:论我的T3是如何苟掉的

说起来都是泪啊

T3的bfs一直不对,我想死。

考试时候苟了两个小时,死活找不到错误(因为lca和离散化都码出来了,太乱)

最后把bfs单独提出来,发现在bfs里面输出的f[ly][0]都是正确的,到外面就彻底崩掉,全是0。

又调了一节课,终于发现

数组越界了。。。

错误代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
#define rint register int
using namespace std;
int n,m,a,b,tot,first[100005];
int deep[100005],f[100005][18];
struct node{
	int u,v,nxt;
}edge[100005];
inline void add(int u,int v)
{
	++tot;
	edge[tot].u=u;
	edge[tot].v=v;
	edge[tot].nxt=first[u];
	first[u]=tot;
}
inline void bfss()
{
	queue <int> q;
	deep[1]=1;
	q.push(1);
	while(!q.empty())
	{
		int lq=q.front();q.pop();
		for(rint i=first[lq];i;i=edge[i].nxt)
		{
			int ly=edge[i].v;
			if(ly==0)continue;
			if(deep[ly])continue;
			deep[ly]=deep[lq]+1;
			f[ly][0]=lq;
			cout<<ly<<":fa:"<<f[ly][0]<<endl;
//			cout<<f[20][0]<<endl;
			for(rint j=1;j<=18;++j)
			{
				f[ly][j]=f[f[ly][j-1]][j-1];
				printf("f[%d][%d]=%d\n",ly,j,f[ly][j]);
			}
			q.push(ly);
		}
	}
	return ;
}
int main()
{
	scanf("%d %d",&n,&m);
	for(rint i=1;i<n;++i)
	{
		scanf("%d %d",&a,&b);
		add(a,b);add(b,a);
	}
	bfss();
	cout<<f[20][0]<<endl;
}

 正确代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
#define rint register int
using namespace std;
int n,m,a,b,tot,first[100005];
int deep[100005],f[100005][18];
struct node{
	int u,v,nxt;
}edge[100005];
inline void add(int u,int v)
{
	++tot;
	edge[tot].u=u;
	edge[tot].v=v;
	edge[tot].nxt=first[u];
	first[u]=tot;
}
inline void bfss()
{
	queue <int> q;
	deep[1]=1;
	q.push(1);
	while(!q.empty())
	{
		int lq=q.front();q.pop();
		for(rint i=first[lq];i;i=edge[i].nxt)
		{
			int ly=edge[i].v;
			if(ly==0)continue;
			if(deep[ly])continue;
			deep[ly]=deep[lq]+1;
			f[ly][0]=lq;
			cout<<ly<<":fa:"<<f[ly][0]<<endl;
//			cout<<f[20][0]<<endl;
			for(rint j=1;j<=17;++j)
			{
				f[ly][j]=f[f[ly][j-1]][j-1];
				printf("f[%d][%d]=%d\n",ly,j,f[ly][j]);
			}
			q.push(ly);
		}
	}
	return ;
}
int main()
{
	scanf("%d %d",&n,&m);
	for(rint i=1;i<n;++i)
	{
		scanf("%d %d",&a,&b);
		add(a,b);add(b,a);
	}
	bfss();
	cout<<f[20][0]<<endl;
}

 我想去死怎么办。。。

猜你喜欢

转载自www.cnblogs.com/xingmi-weiyouni/p/11031881.html
T3