news 2026/7/2 10:55:49

打卡信奥刷题(3421)用C++实现信奥题 P10178 陌路寻诗礼

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(3421)用C++实现信奥题 P10178 陌路寻诗礼

P10178 陌路寻诗礼

题目背景

作为 luogu 网红的帆巨,有非常多狂热的粉丝,而我们的帆巨也很喜欢面基,寻找遍布大江南北的粉丝们。

题目描述

帆巨所在的家乡的地图是一张有nnn个节点mmm条有向道路的有向图,每个节点都是一个城市,而帆巨所在的城市是111号城市,并且111号城市总是可以通过若干道路到达其他任何城市。

iii条道路从xix_ixi号城市出发到达yiy_iyi号城市,长度为ziz_izi

帆帆现在要从他的111号城市前往各个城市面基。

精通 spfa 算法的帆帆在面基的过程中自然会按照长度和最短的路径去其他城市。

但是帆帆有选择困难症,他希望从111号城市到达每一座城市的最短路径都是唯一的,所以他决定施加魔法,改变所有道路的长度,具体地:

帆巨施加魔法后,对于每一条道路的长度,都可以独立地将其变成一个[1,k][1,k][1,k]范围内的整数,其中kkk是帆巨的魔法等级。

但帆巨所在的世界的地图和他的魔法等级一直在变,总共会变TTT次,所以他希望你对TTT次询问都给出一种构造方法使得帆巨不会纠结或者报告无解。

输入格式

第一行一个整数TTT表示数据组数。

接下来TTT组,每组先是三个整数n,m,kn,m,kn,m,k,接着mmm行描述有向道路(xi,yi)(x_i,y_i)(xi,yi)

不保证无自环无重边。

输出格式

对于每组数据,如果有解,第一行输出Yes,第二行mmm个数依次输出每条边的权值;如果没有解,一行输出No

本题采用special judge评测,也就是说,如果有多种可能的答案,你可以输出任意一种。

输入输出样例 #1

输入 #1

2 3 2 3 1 2 2 3 2 2 1 1 2 1 2

输出 #1

Yes 1 2 No

说明/提示

【样例解释】

对于第一组数据,111号点到达每个点的路径都是唯一,自然无论怎么设置边权,最短路都是唯一的。

对于第二组数据,因为k=1k=1k=1,所以两条边的边权都只能设置为111111号点到222号点的最短路长度为111,走两条边都可以,所以不是唯一的。

【数据范围】

本题采用捆绑测试。

对于20%20\%20%的数据,n,m≤5n,m\leq 5n,m5

对于另外20%20\%20%的数据,k=1k=1k=1

对于另外20%20\%20%的数据,m=n−1m=n-1m=n1

对于另外20%20\%20%的数据,k=109k=10^9k=109

对于100%100\%100%的数据,n≥1n\ge 1n1m≥0m\ge 0m01≤∑n,∑m≤3×1051\le \sum n,\sum m\leq 3\times 10^51n,m3×1051≤k≤1091\leq k \leq 10^91k1091≤xi,yi≤n1\le x_i,y_i\le n1xi,yin

C++实现

#include<bits/stdc++.h>usingnamespacestd;constintN=3e5+10;intT,n,m,k,d[N];vector<pair<int,int>>g[N];boolvis[N],tf;queue<int>q;intmain(){scanf("%d",&T);while(T--){scanf("%d%d%d",&n,&m,&k);tf=false;for(inti=1;i<=n;++i)d[i]=-1,g[i].clear();for(inti=1,x,y;i<=m;++i){scanf("%d%d",&x,&y);vis[i]=false;g[x].push_back(make_pair(y,i));}d[1]=0;q.push(1);while(!q.empty()){intx=q.front();q.pop();for(autotmp:g[x]){inty=tmp.first;if(d[y]!=-1){if(d[y]==d[x]+1)tf=true;continue;}d[y]=d[x]+1;vis[tmp.second]=true;q.push(y);}}if(k==1&&tf){puts("No");continue;}puts("Yes");for(inti=1;i<=m;++i)if(vis[i])cout<<1<<" \n"[i==m];elsecout<<k<<" \n"[i==m];}return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 10:53:39

分享我的开源项目: 基于Go开发的微服务即时通讯与社交平台

工作之余断断续续开发了一年时间&#xff0c;欢迎stars go-hichat-api English | 简体中文 go-hichat-api 是Go语言后端与 Web 客户端仓库&#xff0c;是一个基于 go-zero 的微服务即时通讯与社交平台。项目整合 REST API、zRPC 服务、WebSocket 长连接、Kafka 异步链路、Mon…

作者头像 李华
网站建设 2026/7/2 10:53:35

ASM330LHH与STM32F410RB运动跟踪系统设计指南

1. ASM330LHH与STM32F410RB的硬件组合解析1.1 ASM330LHH的6DoF IMU特性拆解ASM330LHH这颗汽车级6轴惯性模块采用系统级封装(SiP)技术&#xff0c;在3.3mm2.6mm0.83mm的微型封装内集成了三轴数字加速度计和三轴数字陀螺仪。实测中&#xff0c;其加速度计量程可配置为2/4/8/16g&a…

作者头像 李华
网站建设 2026/7/2 10:48:54

嵌入式条码扫描系统开发:LV30与PIC18F85J10实战解析

1. 项目背景与硬件选型解析在工业自动化和零售管理领域&#xff0c;条码扫描技术已经渗透到各个环节。我最近完成了一个嵌入式条码扫描系统的开发项目&#xff0c;核心目标是实现多介质环境下的高兼容性条码识别。这个方案采用了LV30扫描头与PIC18F85J10微控制器的组合&#xf…

作者头像 李华
网站建设 2026/7/2 10:47:17

AD74412R与MKV46F256VLH16工业级信号处理方案解析

1. AD74412R与MKV46F256VLH16的黄金组合&#xff1a;工业级性能提升方案在工业自动化和过程控制领域&#xff0c;信号采集与处理的实时性、精度要求越来越高。ADI的AD74412R四通道可配置I/O芯片与NXP的MKV46F256VLH16 ARM Cortex-M4微控制器的组合&#xff0c;恰好能满足这一需…

作者头像 李华