这也能过?
查看原帖
这也能过?
1007879
May_to_July楼主2024/12/18 20:58

第32行的else 按说是不能加(奇偶最短路按说分开)的,加了也过是为什么???

#include<bits/stdc++.h>
using namespace std;
int h[200005],nxt[200005],to[200005],dis[100005][3],cnt;
void add(int u,int v){
	cnt++;
	nxt[cnt]=h[u];
	h[u]=cnt;
	to[cnt]=v;
}
int main(){
	int n,m,qu,u,v,a,l;
	cin>>n>>m>>qu;
	for(int i=1;i<=n;i++){
		dis[i][1]=dis[i][2]=0x3fffffff;
	}
	for(int i=1;i<=m;i++){
		cin>>u>>v;
		add(u,v);
		add(v,u);
	}
	queue<int> q;
	dis[1][2]=0;
	q.push(1);
	while(!q.empty()){
		int u=q.front();
		q.pop();
		for(int t=h[u];t;t=nxt[t]){
			int v=to[t];
			if(dis[u][1]+1<dis[v][2]){
				q.push(v); 
				dis[v][2]=dis[u][1]+1;
			}else//??????????
			if(dis[u][2]+1<dis[v][1]){
				q.push(v);
				dis[v][1]=dis[u][2]+1;
			}
		}
	}
	for(int i=1;i<=qu;i++){
		cin>>a>>l;
		if(l%2==0){
			if(dis[a][2]<=l){
				puts("Yes");
			}else{
				puts("No");
			}
		}else{
			if(dis[a][1]<=l){
				puts("Yes");
			}else{
				puts("No");
			}
		}
	}
	return 0;
}
2024/12/18 20:58
加载中...