为什么错了一个点???特判过了呀
查看原帖
为什么错了一个点???特判过了呀
266774
wdzxghl楼主2020/7/19 14:57
#include<bits/stdc++.h>
using namespace std;
const int maxn=500010;
struct edge {
	int to,next;
} Edge[maxn];
struct dian {
	int ji,ou;
} f[maxn];
int p[maxn],Edge_num;
int n,m,s,Q;
void Edge_add(int x,int y) {
	Edge[++Edge_num].next=p[x];
	Edge[Edge_num].to=y;
	p[x]=Edge_num;
}
void SPFA() {

	queue<int>que;
	for(int i=1; i<=n; i++)
		f[i].ji=f[i].ou=0xfff;
	f[1].ou=0;
	que.push(1);
	while(!que.empty()) {
		int x=que.front();
		que.pop();
		for(int i=p[x]; i!=0; i=Edge[i].next) {
			int tmp=Edge[i].to,ji=f[tmp].ji,ou=f[tmp].ou;
			f[tmp].ji=min(f[tmp].ji,f[x].ou+1);
			f[tmp].ou=min(f[tmp].ou,f[x].ji+1);
			if(f[tmp].ji!=ji||f[tmp].ou!=ou) {
				que.push(tmp);
			}
		}
	}
}
int main() {
	cin>>n>>m>>Q;
	int u,v,w;
	Edge_num=0;
	memset(p,0,sizeof(p));
	while(m--) {
		int u,v;
		cin>>u>>v;
		Edge_add(u,v);
		Edge_add(v,u);
	}
	SPFA();
	for(int i=Q; i>=1; i--) {
		int x,y;
		cin>>x>>y;
		if(p[1]==0)cout<<"Yes"<<endl;
		else 
		if(y%2==1&&f[x].ji<=y) {
			cout<<"Yes"<<endl;
		} else if(y%2==0&&f[x].ou<=y) {
			cout<<"Yes"<<endl;
		} else cout<<"No"<<endl;
	}
	return 0;
}
2020/7/19 14:57
加载中...