我把下面第15行处的 set<tuple<int,int> >改为unordered_set<tuple<int,int> >后,原先成功的编译出现错误:
错误:使用了被删除的函数‘unique_queue::unique_queue()’
}q;
求大佬解答
代码
#include<bits/stdc++.h>
using namespace std;
const int N=3e4+5;
int read(){
int ret=0;char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)) ret=ret*10+ch-'0',ch=getchar();
return ret;
}
int n,m,p[N],k[N],s,t;
vector<int> mem[N];
bool add[N];
struct unique_queue{
unordered_set<tuple<int,int> > vis;
queue<tuple<int,int,int> > q;
void push(tuple<int,int,int> x){
int p,k;tie(p,k,ignore)=x;
if(vis.count({p,k})) return;
q.push(x),vis.insert({p,k});
}
void pop(){q.pop();}
tuple<int,int,int> front(){return q.front();}
bool empty(){return q.empty();}
}q;
void explore(int nxtp,int curk,int dis){
q.push({nxtp,curk,dis+1});
if(add[nxtp]) return;add[nxtp]=1;
for(int i=0;i<mem[nxtp].size();++i)
q.push({nxtp,k[mem[nxtp][i]],dis+1});
}
int main(){
n=read(),m=read();
for(int i=1;i<=m;++i){
p[i]=read()+1,k[i]=read();
if(i==1) s=p[i];
if(i==2) t=p[i];
mem[p[i]].push_back(i);
}
if(s==t) puts("0"),exit(0);
for(int i=0;i<mem[s].size();++i)
q.push({s,k[mem[s][i]],0});
while(!q.empty()){
int curp,curk,dis;
tie(curp,curk,dis)=q.front();q.pop();
if(curp==t) printf("%d\n",dis),exit(0);
if(curp+curk<=n) explore(curp+curk,curk,dis);
if(curp-curk>=1) explore(curp-curk,curk,dis);
}
puts("-1");
return 0;
}