1 条题解
-
0

// 最短路+奇偶可达性 BFS 算法 O(N+M) #include<bits/stdc++.h> using namespace std; #define N 100010 int idx,h[N],to[N<<1],ne[N<<1]; void add(int x,int y){ to[++idx]=y;ne[idx]=h[x];h[x]=idx; } int n,m,q; int d[N],dd[N]; //d[u]/dd[u]表示u到1的奇数距离/偶数距离 void bfs(){ memset(d,0x3f,sizeof(d)); memset(dd,0x3f,sizeof(dd)); dd[1]=0; queue<int> q; q.push(1); while(q.size()){ int u=q.front(); q.pop(); for(int i=h[u]; i; i=ne[i]){ int v=to[i]; if(dd[v]>d[u]+1) dd[v]=d[u]+1,q.push(v); if(d[v]>dd[u]+1) d[v]=dd[u]+1,q.push(v); } } } int main(){ scanf("%d%d%d",&n,&m,&q); for(int i=1,u,v; i<=m; i++){ scanf("%d%d",&u,&v); add(u,v); add(v,u); } bfs(); for(int i=1,a,L; i<=q; i++){ scanf("%d%d",&a,&L); if(a==1 && !h[1]){ //如果1是孤立点 puts("No"); continue; } // L是奇数且a点的奇数距离可达1 或 L是偶数且a点的偶数距离可达1 if(L%2==1&&d[a]<=L || L%2==0&&dd[a]<=L)puts("Yes"); else puts("No"); } }
- 1
信息
- ID
- 1993
- 时间
- 1000ms
- 内存
- 250MiB
- 难度
- 9
- 标签
- 递交数
- 10
- 已通过
- 4
- 上传者