求调 80 pts(最后四个点WA)
查看原帖
求调 80 pts(最后四个点WA)
952172
Wangxxy123456楼主2024/9/30 20:50
using namespace std;
int he[1000005],ne[1000005],ver[1000005],tot;
int vis[2][100005],num[4005][4005]; 
struct node{  
	int x,sum;
	bool operator < (const node &p) const{
		return sum>p.sum; 
	}
}a[100005];
void add(int x,int y){
	ver[++tot]=y;
	ne[tot]=he[x];
	he[x]=tot;
}
priority_queue<node> p;
void dijkstra(){
	memset(num,0x3f,sizeof num);
	num[0][1]=0;
	p.push({1,0});
	while(!p.empty()){
		node d=p.top();
		p.pop();
		if(vis[d.sum%2][d.x])continue;
		vis[d.sum%2][d.x]=1;
		num[d.sum%2][d.x]=d.sum;
		for(int i=he[d.x];i;i=ne[i]){
			int new_point=ver[i];
			if(vis[(d.sum+1)%2][new_point]) continue;
			else p.push({new_point,d.sum+1});
		}
	}
}
int main(){
	int n,m,q;
	cin>>n>>m>>q;
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		add(x,y);
		add(y,x);
	}
	dijkstra();
	for(int j=1;j<=q;j++){
		int op,l,f=1;
		cin>>op>>l;
		for(int i=0;i<2;i++){
			if(num[i][op]==0x3f3f3f3f) continue;
			if(num[i][op]<=l&&(l-num[i][op])%2==0){
				cout<<"Yes\n";
				f=0;
				break;
			}
		}
		if(f) cout<<"No"<<endl;
	}
	return 0;
}

求调 80 pts

2024/9/30 20:50
加载中...