求助,TLE on #13
查看原帖
求助,TLE on #13
224236
GoPoux4楼主2020/10/14 16:19

RT

在LOJ和UOJ上测都过了,还跑得飞快

在你谷评测不开O2就会在#13T掉。

这个可能是什么原因啊,求解答/kel

Code:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <bitset>
#include <queue>
#include <tuple>
#define Rint register int
#define INF 0x3f3f3f3f
using namespace std;
typedef long long lxl;
const int maxn=3e4+5;

template <typename T>
inline void read(T &x)
{
	x=0;T f=1;char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
	x*=f;
}

int n,m;
vector<int> vec[maxn];
queue<tuple<int,int,int> > q;
bitset<maxn> vis_doge[maxn],vis_city;

inline void insert(int b,int p,int step)
{
	if(!vis_city.test(b))
	{
		vis_city.set(b);
		for(auto x:vec[b])
		{
			vis_doge[b].set(x);
			q.push(make_tuple(b,x,step));
		}
	}
	if(!vis_doge[b].test(p))
	{
		vis_doge[b].set(p);
		q.push(make_tuple(b,p,step));
	}
}

int main()
{
	// freopen("P3645.in","r",stdin);
	read(n),read(m);
	int s,t;
	for(int i=0,b,p;i<m;++i)
	{
		read(b),read(p);
		vec[b].push_back(p);
		if(i==0) s=b;
		if(i==1) t=b;
	}
	for(auto x:vec[s])
		insert(s,x,0);
	while(!q.empty())
	{
		int b,p,step;
		tie(b,p,step)=q.front();q.pop();
		if(b==t) return printf("%d\n",step),0;
		if(b-p>=0) insert(b-p,p,step+1);
		if(b+p<n) insert(b+p,p,step+1);
	}
	puts("-1");
	return 0;
}
2020/10/14 16:19
加载中...