洛谷 P5663 加工零件 & [NOIP2019普及组] (奇偶最短路)
传送门
解题思路
很容易想到用最短路来解决这一道问题(题解法),因为两个点之间可以互相无限走,所以如果到某个点的最短路是x,那么x+2,x+4也一定能够达到。
但是如何保证这是正确的呢?比如说到某个点的最短路是x,为什么不可能走一下弯路,是某一条路径的长度是x+1或者x+3或者x+5呢?
所以就用到了奇偶最短路。所谓奇偶最短路,就是对于每一个点,记录下走偶数步的最短路(ou[i])和走奇数步的最短路(ji[i]),转移式为:
ji[v]=min(ou[u]+1,ji[v]);
ou[v]=min(ji[u]+1,ou[v]);
注意一定要用u去更新v,即距离近的去更新远的。
AC代码
- #include<iostream>
- #include<cstdio>
- #include<queue>
- #include<cstring>
- using namespace std;
- const int maxn=;
- int n,m,Q;
- int ji[maxn],ou[maxn],vis[maxn],p[maxn];
- queue<int> q;
- struct edge{
- int v,next;
- }e[*maxn];
- int cnt;
- void insert(int u,int v){
- e[++cnt].v=v;
- e[cnt].next=p[u];
- p[u]=cnt;
- }
- int main(){
- memset(ji,0x3f,sizeof(ji));
- memset(ou,0x3f,sizeof(ou));
- memset(p,-,sizeof(p));
- cin>>n>>m>>Q;
- for(int i=;i<=m;i++){
- int u,v;
- scanf("%d%d",&u,&v);
- insert(u,v);
- insert(v,u);
- }
- ou[]=;
- q.push();
- while(!q.empty()){
- int u=q.front();
- q.pop();
- vis[u]=;
- for(int i=p[u];i!=-;i=e[i].next){
- int v=e[i].v;
- if(ji[v]>ou[u]+){
- ji[v]=ou[u]+;
- if(vis[v]==){
- q.push(v);
- vis[v]=;
- }
- }
- if(ou[v]>ji[u]+){
- ou[v]=ji[u]+;
- if(vis[v]==){
- q.push(v);
- vis[v]=;
- }
- }
- }
- }
- for(int i=;i<=Q;i++){
- int a,l;
- scanf("%d%d",&a,&l);
- if(((l&)&&ji[a]<=l)||((!(l&))&&ou[a]<=l))printf("Yes\n");
- else printf("No\n");
- }
- return ;
- }
//CSP2019普及组 t4
洛谷 P5663 加工零件 & [NOIP2019普及组] (奇偶最短路)的更多相关文章
- 洛谷 P5660 数字游戏 & [NOIP2019普及组]
传送门 洛谷改域名了QAQ 解题思路 没什么好说的,一道红题,本不想发这篇博客 ,但还是尊重一下CCF吧QAQ,怎么说也是第一年CSP呢! 用getchar一个个读入.判断.累加,最后输出即可. 不过 ...
- 洛谷 P5663 加工零件
题目传送门 解题思路: 最暴力的做法: bfs模拟,每次将一个阶段的所有点拿出来,将其所有直连的点都放进队列,知道本阶段结束,最后看1号点会不会在最后一个阶段被放入队列.(洛谷数据40分) 优化了一下 ...
- 洛谷 P5661 公交换乘 & [NOIP2019普及组] (模拟)
传送门 解题思路 先把所有的数据读下来. 对于地铁,答案直接加,然后把编号放入一个数组a内. 对于公交车,从前往后枚举a数组,然后找到出现最早的且符合价钱大于等于公交车的价钱,然后把这个数删除(变为0 ...
- 洛谷【P2669】NOIP2015普及组 T1金币
我对模拟的理解:http://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.luogu.org/problemnew/show/P266 ...
- 洛谷P1003 铺地毯 noip2011提高组day1T1
洛谷P1003 铺地毯 noip2011提高组day1T1 洛谷原题 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n ...
- P5663 加工零件
P5663 加工零件 题解 暴力搜索 搜索显然会TLE #include<iostream> #include<cstdio> #include<cstdlib> ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 洛谷 P5662 纪念品 & [NOIP2019普及组] (dp,完全背包)
传送门 解题思路 本题首先要明白,在每一天时,最优策略是先进行操作2(卖),再进行操作1(买),才能是利益最大化. 本题很显然当只有两天时,是一个完全背包,就是把当日价钱当做体积,把明日价格和今日价格 ...
- NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
原文链接https://www.cnblogs.com/zhouzhendong/p/9258043.html 题目传送门 - 洛谷P3953 题目传送门 - Vijos P2030 题意 给定一个有 ...
随机推荐
- JAVA笔记19-容器之三 Set接口、List接口、Collections类、Comparable接口(重要)
一.Set接口 //HashSet综合举例 import java.util.*; public class Test{ public static void main(String[] args){ ...
- JAVA笔记15-线程同步
一.概念 1.多个线程之间访问同一资源,进行协调的过程是线程同步.例如两个人同时操作同一银行账户.解决方法:加锁 2.Java种引入对象互斥锁的概念,保证共享数据操作的完整性.每个对象都对应于一个可称 ...
- Leaflet使用vector tiles样式设置
//point style var myIcon = L.icon({ iconUrl: 'css/images/dian.svg', // shadowUrl: 'css/images/leaf-s ...
- Codeforces 960F Pathwalks ( LIS && 树状数组 )
题意 : 给出若干个边,每条边按照给出的顺序编号,问你找到一条最长的边权以及边的编号同时严格升序的一条路径,要使得这条路径包含的边尽可能多,最后输出边的条数 分析 : 这题和 LIS 很相似,不同的 ...
- 容器————unordered_map
#include < unordered_map > map: map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此ma ...
- 搭建一套简单的web服务器,记录实验过程
搭建web服务器 一.实验内容: 实验要求: 1.完成一个简单的web服务器,web服务器从mysql里读取数据进行返回 2.Mysql需要有一个单独的数据盘,每个mysql虚拟机的磁盘挂载方式需要都 ...
- sublime text3 - vue修改data,视图无更新
ubuntu系统使用sublime text3做vue开发的时候遇到了一个问题,就是修改vue文件并保存后视图页面并不会随之修改,只有重新run dev时修改才会生效,原因没找到 猜想应该是subli ...
- css实现不定宽高的div水平、垂直居中
一共有三个方案: 1,第一种方案主要使用了css3中transform进行元素偏移,效果非常好 这方法功能很强大,也比较灵活,不仅仅局限在实现居中显示. 兼容方面也一样拿IE来做比较,第二种方法IE ...
- class 用法 函数变量的作用域
函数变量的作用域 1. 函数体内声明的变量 2. 参数中的变量 没有赋值的 function fn(a){} 赋值的,值不是变量 function fn(a=45){} 赋的值为变量 function ...
- React Native商城项目实战05 - 设置首页的导航条
1.Home.js /** * 首页 */ import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Te ...