奇妙编译错误求助
查看原帖
奇妙编译错误求助
372708
Yahbim楼主2021/10/4 12:50

我把下面第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;
}
2021/10/4 12:50
加载中...