加工零件

加工零件

方法一

/* 
整体思路:
	1.计算出1到其他任意点的奇数最短路径和偶数最短路径
 	2.如果询问的点为X,长度为L。 L为偶数,1到X的偶数最短路径应该大于等于L;
	 L为奇数,1到X的奇数最短路径应该大于等于L,如果小于肯定输出NO表示不能到达
*/
#include<bits/stdc++.h>
#define UP(i,x,y) for(int i=x; i<=y; i++)
#define INF 2139062143
using namespace std;
vector<int> myMap[100005];
int N,M,Q; 
int shortPath[100000][2];
queue< pair<int, int> > que;

/* 从1到e的最短路径 */
void bfs()
{
   
	int head;
	int step;
	
	while(!que.empty())
	{
   
		/* 拿出队头的结点和步数 */
		head = que.front().first;
		step = que.front().second;
		
		for(vector<int>::iterator u = myMap[head].begin(); u!=myMap[head].end(); ++u)
		{
   
			/* 重点!只有找到当前的最短步数才入队,这样的好处是不会走回头路,
				因为走了回头路的话步数肯定会大于之前的最短路。 */
			/* 如果步数为偶数,并且是最短的 ,入队并且记录最短路*/	 
			if((step+1) % 2 == 0 and step+1 < shortPath[*u][0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值