这道题的数据是不是没有考虑某个点是不连通的问题呀
查看原帖
这道题的数据是不是没有考虑某个点是不连通的问题呀
482593
csoier楼主2024/6/15 20:33

我的程序是这样的

#include <bits/stdc++.h>
#include <stack>
#include <queue>
#include <vector>
using namespace std;
const int N=100005;
int tot,h[N],n,m,a,L,q,u,v,dis[N][2];
bool vis[N][2];
struct node {
	int to,nxt;
}edge[N<<1];
void add(int u,int v){
	edge[++tot]={v,h[u]};
	h[u]=tot;
}
void SPFA(int s){
	int u,v,i;
	memset(dis,0x3f,sizeof(dis));dis[s][0]=0;
	queue <int> q; q.push(s);vis[s][0]=1;
	while(q.size()){
		u=q.front();
		for(i=h[u];i;i=edge[i].nxt) {
			v=edge[i].to;
			if(dis[u][0]+1<dis[v][1]) {
				dis[v][1]=dis[u][0]+1;
				if(!vis[v][1]) q.push(v),vis[v][1]=1;
			}
			if(dis[u][1]+1<dis[v][0]){
				dis[v][0]=dis[u][1]+1;
				if(!vis[v][0]) q.push(v),vis[v][0]=1;
			}
			
		}
		q.pop();vis[u][0]=vis[u][1]=0;
	}
	dis[s][0]=2;
}
int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>m>>q;
	for(int i=1;i<=m;i++)	
		cin>>u>>v,add(u,v),add(v,u);
	SPFA(1);
	while (q--){
		cin>>a>>L;
		if(dis[a][L%2]!=0x3f3f3f && dis[a][L%2]<=L) cout<<"Yes\n";
		else cout<<"No\n";
	}
}
2024/6/15 20:33
加载中...