80分求调
查看原帖
80分求调
714048
Takato_楼主2024/7/25 14:37

WA了最后四个点。。。

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,t,h[1000010],cnt,ans[1000010];
bool st[1000010];
struct no{
	int ans,id;
	bool operator <(const no &x) const{
		return x.ans<ans;
	}
};
struct P{
	int v,w,ne;
}e[100010];
void ad(int x,int y,int z){
	e[++cnt].v=y,e[cnt].w=z,e[cnt].ne=h[x],h[x]=cnt;
}priority_queue<no> q;
void get(){
	q.push({0,1});
	while(q.size()){
		no t=q.top();
		q.pop();
		if(st[t.id]==0){
			st[t.id]=1;
			for(int i=h[t.id];i;i=e[i].ne){
				if(ans[e[i].v]>ans[t.id]+e[i].w){
					ans[e[i].v]=ans[t.id]+e[i].w;
					if(!st[e[i].v]) q.push({ans[e[i].v],e[i].v});
				}
			}
		}
	}
}signed main(){
	cin>>n>>m>>t;
	for(int i=1;i<=m;i++){
		int u,v;
		cin>>u>>v,ad(v,u+n,1),ad(u+n,v,1),ad(v+n,u,1),ad(u,v+n,1);
	}memset(ans,0x3f,sizeof ans);
	ans[1]=0;
	get();
	while(t--){
		int a,b;
		cin>>a>>b;
		if(b%2==1) cout<<(ans[a+n]<=b?"Yes":"No");
		else cout<<(ans[a]<=b?"Yes":"No");
		cout<<endl;
	}
}
2024/7/25 14:37
加载中...