洛谷 P5663 加工零件
题目传送门 解题思路: 最暴力的做法 : bfs模拟,每次将一个阶段的所有点拿出来,将其所有直连的点都放进队列,知道本阶段结束,最后看1号点会不会在最后一个阶段被放入队列.(洛谷数据40分) 优化了一下代码: 上面的做法我用了两个队列,发现代码可以优化一下,用一个队列.(洛谷数据55分). 正解: 对于一个点,如果它加工的零件是偶数阶段,则在一定范围内与它偶数距离的点都要提供原料. 对于一个点,如果它加工的零件是奇数阶段,则在一定范围内与它奇数距离的点都要提供原料. 那么这个一定范围是多少呢? 就是小于等于这个点加工阶段大小的范围. 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<vector> 4 #include<cstring> 5 #include<queue> 6 7 using namespace std; 8 9 int n,m,qq,x,y; 10 bool vis[500001]; 11 queue<int> q,q1; 12 struct kkk{ 13 vector<int > a; 14 int len; 15 }e[100001]; 16 17 inline void solve() { 18 int id,s; 19 scanf("%d%d",&id,&s); 20 memset(vis,0