【ZJ选讲·调整】
给出n个点,m条有向边(带正权),起点S,终点T。(n<=2000,m<=30000)
再给出一个k,表示可以把最多k条边的权值调整为任意非负整数。(k<=100)
问是否可以通过上面的骚操作使得S->T最短路==给定的长度c
保证最开始的S->T的最短路大于c
【题解】
①建立分层图,分层取决于修改边数
②因此相邻层之间的连边就是原图边,权值为0
③如果有一层的最短路小于了c,说明存在方法构造c长度的最短路
④根据上述处理结果找到最小的修改边数就是了
#include<queue>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct edge{
int to,val,next;
}e[3000000];
int head[200000],dis[200000];
bool inq[200000];
int n,m,c,ent=1;
void add(int u,int v,int w){
e[ent]=(edge){v,w,head[u]};
head[u]=ent++;
}
void spfa(){
memset(dis,0x3f,sizeof(dis));
queue<int> q;int u,v;
q.push(1);inq[1]=1;dis[1]=0;
while(!q.empty()){
u=q.front(); q.pop(); inq[u]=0;
for(int i=head[u];i;i=e[i].next){
v=e[i].to;
if(dis[v]<=dis[u]+e[i].val) continue;
dis[v]=dis[u]+e[i].val;
if(inq[v]) continue;
q.push(v);
inq[v]=1;
}
}
}
int main(){
scanf("%d%d%d",&n,&m,&c);
for(int i=1,u,v,w;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
for(int j=0;j<=m;j++){
add(u+j*n,v+j*n,w);
add(u+j*n,v+(j+1)*n,0);
}
}
spfa();
for(int i=0;i<=m;i++)
if(dis[n+i*n]<=c){
printf("%d",i);
break;
}
return 0;
}//*ZJ
.
【ZJ选讲·调整】的更多相关文章
- 【ZJ选讲·画山】
给出一张纸(N × M),你要在上面画山,但不能画出界(N,M<=100) Like this: 起点为(0,0),终点为(N,0) 给出w种线段画法(x,y),表示用了这种画法后,笔迹末 ...
- 【ZJ选讲·字符串折叠】
给一个字符串(len<=100) 把这个字符串折叠(就是压缩) 记 X(子串) 表示重复 X次该子串 比如 3(orz) orzorzorz 来点神奇例子: AAAAAAAAAA ...
- 【ZJ选讲·压缩】
给一个由小写字母组成的字符串(len<=50) 我们可以用一种简单的方法来压缩其中的重复信息. 用M,R两个大写字母表示压缩信息 M标记重复串的开始, R表示后面的一段字符串重复从上一个 ...
- 【ZJ选讲·钻石游戏】
N×M的棋盘(M,N<=500)中,每个格子有一个颜色(颜色数1~9) P次操作(P<=1000),每次给出两个相邻的位置(保证颜色不同,两个格子有一条公共边),把这两个格子交换. 定 ...
- 【ZJ选讲·BZOJ 5073】
小A的咒语 给出两个字符串A,B (len<=105) 现在可以把A串拆为任意段,然后取出不超过 x 段,按在A串中的前后顺序拼接起来 问是否可以拼出B串. [题解] ①如果遇 ...
- 【ZJ选讲·BZOJ 5071】
小A的数字 有一串数字A1 ,A2,--,An,每次可以进行如下骚操作: 选择一个数字i,将(Ai-1,Ai,Ai+1)变为(Ai-1+Ai,-Ai,Ai+1+Ai), (特别地,若i=N,则( ...
- PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记
PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...
- 2019暑期金华集训 Day6 杂题选讲
自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...
- DP选讲
$DP$选讲直接上题吧放个题单[各省省选DP](https://www.luogu.com.cn/training/151079)$P5322[BJOI2019]$排兵布阵一眼题,考虑$dp[i][j ...
随机推荐
- php PHPEXcel导出
1获取数据,2组装数据,3生成文件. 注意:无法使用ajax生成导出. $settlement = \Yii::$app->request->get('settlement'); $sav ...
- 自己动手编写 Dockerfile 构建自定义的Jenkins
1.构建jenkins 镜像 vim Dockerfile FROM jenkins USER root ARG dockerGid=999 RUN echo "docker:x:${d ...
- xpath简单入门
语法: 选取节点: 实例: (贴图转载自w3school) 补充: /a/@href #获取a标签的href属性 当<div class="demo">& ...
- 单服务器最大tcp连接数及调优汇总
启动线程数: 启动线程数=[任务执行时间/(任务执行时间-IO等待时间)]*CPU内核数 最佳启动线程数和CPU内核数量成正比,和IO阻塞时间成反比.如果任务都是CPU计算型任务,那么线程数最多不超过 ...
- 『AngularJS』Service
理解Angular 服务 什么是Angular Service Angular 服务是为web应用执行特定任务的单例对象或方法. 注:如果组件是为了内容呈现的功能复用,那么服务就是为组件进行功能复用. ...
- 30分钟快速搭建Web CRUD的管理平台--django神奇魔法
加上你的准备的时间,估计30分钟完全够用了,因为最近在做爬虫管理平台,想着快速开发,没想到python web平台下有这么非常方便的框架,简洁而优雅.将自己的一些坑总结出来,方便给大家的使用. 准备环 ...
- 关于相对布局RelativeLayout的各种属性介绍
RelativeLayout相对布局是个人觉得在android布局中比较常用且好用的一个,当然如果想让布局更漂亮是需要多种布局混合搭建的,这里就需要更深入的学习了,在这只介绍下有关相对布局的东西. 相 ...
- 「题目代码」P1007~P1012(Java)
1007 C基础-计负均正 import java.util.*; import java.io.*; public class Main { public static void main(Stri ...
- 关于Vue脚手架写法的问题
问题描述: main.js import Vue from 'vue' import App from './App' /* eslint-disable no-new */ new Vue({ el ...
- coia阻止事件上浮
1.阻止事件上浮 选择默认地址li 时 选中整个div使其为默认地址 此时点击编辑按钮也会触发选中默认事件 为事件添加event.stopPropagation();阻止事件上浮 2.js给页面inp ...