最后四个点TLE,求dalao指点
查看原帖
最后四个点TLE,求dalao指点
114445
Luo_diary楼主2021/8/20 16:04
#include<iostream>
#include<algorithm>
using namespace std;
int mapp[100005][2]={0},f[2000005]={0};
bool ans[100005];
struct edge
{
	int to,next;
}maap[200010];
void _add(int x,int y,int i)
{
	maap[i*2].next=x,maap[i*2].to=y;
	maap[i*2+1].next=y,maap[i*2+1].to=x;
	//maap[i].next=x,maap[i].to=y;
	return ;
}
int main()
{
	ios::sync_with_stdio(false);
	int i,j,k,n,m,q,x,y,sum=0;
	cin>>n>>m>>q;
	for(i=0;i<=m-1;i++)
	 cin>>x>>y,_add(x,y,i);
	i=0,j=0,f[0]=1,x=0;
	while(i<=j)
	{
		for(k=0;k<=(m-1)*2+1;k++)
		 if(f[i]==maap[k].next&&mapp[maap[k].to][(sum+1)%2]==0)
		  mapp[maap[k].to][(sum+1)%2]=sum+1,j++,f[j]=maap[k].to;//f[++j]=maap[k].to;
		//mapp[f[i]][sum%2]=sum;//min(sum,mapp[f[i]][sum%2]==0?2100000000:mapp[f[i]][sum%2]);
		if(x==i)
		 sum++,x=j;
		i++;
	}
	cout<<i<<'H'<<j<<endl;
	for(i=0;i<=q-1;i++)
	{
		cin>>x>>y;
		if(mapp[x][y%2]!=0&&mapp[x][y%2]<=y)
		 ans[i]=true;
		else
		 ans[i]=false;
	}
	for(i=0;i<=q-1;i++)
	 if(ans[i]==false)
	  cout<<"No"<<endl;
	 else
	  cout<<"Yes"<<endl;
	return 0;
}
2021/8/20 16:04
加载中...