想尝试使用floyed完成部分解,但不知道错哪了
查看原帖
想尝试使用floyed完成部分解,但不知道错哪了
366595
zty_luogu楼主2021/10/3 20:16
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#define F(III,MMM,NNN) for(register int III=MMM;III<=NNN;III++)
typedef long long int ll;
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f3f
#define re register
const int N=1010,
		  mod=10000007;
int g[1001][1001]={};
int main(){
//ios::sync_with_stdio(false);
//cin.tie(0);
//cout.tie(0);
	int n;
	int m,p;
	cin>>m;
	cin>>n>>p;
	memset(g,127,sizeof(g));
	for(int i=1;i<=n;i++){
		int v,u;
		cin>>v>>u;
		g[u][v]=1;
		g[v][u]=1;
	}
	for(int i=1;i<=m;i++){
		g[i][i]=0;
	}
	for(int k=1;k<=m;k++){
		for(int i=1;i<=m;i++){
			for(int j=1;j<=m;j++){
				if(i==j||i==k||j==k)
					continue;
				if(g[i][j]>g[i][k]+g[k][j])
					g[i][j]=g[i][k]+g[k][j];
			}
		}
	}
//	for(int i=1;i<=m;i++){
//		for(int j=1;j<=m;j++){
//			cout<<g[i][j]<<' ';
//		}
//		cout<<endl;
//	}
	for(int i=1;i<=p;i++){
		int x,v;
		cin>>v>>x;
		if(x>=g[v][1]&&(x-g[v][1])%2==0)
			cout<<"Yes\n";
		else
			cout<<"No\n";
	}
	return 0;
}

2021/10/3 20:16
加载中...