题目描述

为了研究一种新型细菌(称它为S型细菌)的性质,Q博士将S型细菌放在了一个犹如迷宫一般的通道面前,迷宫中N个站点,每个站点之间以一种单向通道的形式连接,当然,也有可能某两个站点之间是互不联通的,但是保证S型细菌不会走了一段又绕回原处。

在迷宫中,1号点为入口,N号点为出口。S型细菌被放在了入口,它们在行进过程中只能选择一条通道前进,并要求通过某些通道到达出口。每经过一条通道的时间为1S,而细菌繁殖的速度为每秒多一倍。

为了更好地探究其性质,Q博士在沿途设置了一些利于其生长的培养液和限制其繁殖的青霉素,S型细菌的数量将因此而增加或者减少一定个数(当然,增减是在其繁殖之后计算)。

现在告诉你通道的连接情况和沿途Q博士设置的条件,Q博士想知道,至少应该放多少个细菌在入口,才能保证有细菌能够从出口出来?

输入格式

第一行为一个整数N(3 ≤ N ≤ 100),下面跟着的第i行第j个数为F[i,j](绝对值不超过10000的整数),表示第I个点到第J个点沿途中细菌增加或减少的个数。若F[I,J]=0则表示此路不通。

输出格式

一个正整数,表示至少需要多少个细菌放在入口。

思路:使用spfa,不断迭代更新。

//采取逆向思维,从n倒着搜;
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node
{
int next,to,dis;
}edge[50005];
int head[50005],n,cnt;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
inline void add(int from,int to,int dis)
{
edge[++cnt].next=head[from];
edge[cnt].to=to;
edge[cnt].dis=dis;
head[from]=cnt;
}
int dis[105],vis[105];//dis[i]即从i到n的所需最少的细菌数
void work()
{
queue<int> q;
dis[n]=1;vis[n]=1;q.push(n);
while(!q.empty())
{
int now=q.front();q.pop();vis[now]=0;
for (int i=head[now];i;i=edge[i].next)
{
int to=edge[i].to;
if (dis[to]>max((long long)1,(dis[now]+edge[i].dis+1)/2))
{
dis[to]=max((long long)1,(dis[now]+edge[i].dis+1)/2);
if (!vis[to])
{
q.push(to);
vis[to]=1;
}
} }
}
}
signed main()
{
n=read();
for (int i=1;i<=n;i++) dis[i]=0x3f3f3f3f;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
{
int d=read();
if (d!=0) add(j,i,-d);//反向存图
}
work();
printf("%ld",dis[1]);
return 0;
}

【FZYZOJ】细菌 题解(最短路)的更多相关文章

  1. [JZOJ5279]香港记者题解--最短路图

    [JZOJ5279]香港记者题解--最短路图 题目链接 过 于 暴 力 分析 有一个naiive的想法就是从1到n跑最短路,中途建图,然后在图上按字典序最小走一遍,然而·这是不行的,你这样跳不一定能跳 ...

  2. [洛谷P1144][题解]最短路计数

    这道题可以用各种算法踩掉,我选择的是SPFA. 因为题目要求计数,所以我们开一个ans数组表示数量. 分两种情况讨论: 一:dis_v>dis_u+1 最短路被更新了,可以直接ans_v=ans ...

  3. P1144 最短路计数 题解 最短路应用题

    题目链接:https://www.luogu.org/problem/P1144 其实这道题目是最短路的变形题,因为数据范围 \(N \le 10^6, M \le 2 \times 10^6\) , ...

  4. 洛谷P1462 通往奥格瑞玛的道路 题解 最短路+二分答案

    题目链接:https://www.luogu.com.cn/problem/P1462 题目大意: 有 \(n\) 个点 \(m\) 条边,每个点有一个点权,每个边有一个边权.求所有长度不超过 \(b ...

  5. HDU5521 Meeting 题解 最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 题目大意: 有 \(n\) 个点 \(m\) 个集合,一个点可能处于若干个集合内,属于第 \(i ...

  6. SP338ROADS题解--最短路变式

    题目链接 https://www.luogu.org/problemnew/show/SP338 分析 联想到不久前做过的一道题\(Full\) \(Tank\),感觉可以用优先队列做,于是写了\(d ...

  7. Codeforces Round #303 (Div. 2) E. Paths and Trees 最短路+贪心

    题目链接: 题目 E. Paths and Trees time limit per test 3 seconds memory limit per test 256 megabytes inputs ...

  8. [NOIP2017]逛公园 最短路+拓扑排序+dp

    题目描述 给出一张 $n$ 个点 $m$ 条边的有向图,边权为非负整数.求满足路径长度小于等于 $1$ 到 $n$ 最短路 $+k$ 的 $1$ 到 $n$ 的路径条数模 $p$ ,如果有无数条则输出 ...

  9. POJ 2387 Til the Cows Come Home 【最短路SPFA】

    Til the Cows Come Home Description Bessie is out in the field and wants to get back to the barn to g ...

随机推荐

  1. 在windows中使用labelimg工具搭建图像标注小环境

    文章分成两个部分,第一部分,labelimg工具的安装:第二部分,labelimg工具的使用方法. 第一部分:工具安装 方法一:直接使用网上编译好的Labelimg可执行文件(12.6M),双击执行即 ...

  2. 面向对象之多态(Java实现)

    本文借鉴于csdn,博客园,b站等各大知识分享平台 之前学习了封装与继承,封装就是数据的封装性(大致理解),继承就是一个类继承另一个类的属性,称为父子类 多态 多态是面向对象的第三大特性(共三大特性) ...

  3. Elasticsearch恢复备份的数据

    1.恢复备份好的snapshot 1.1恢复snapshot_1下的所有index POST _snapshot/my_backup/snapshot_1/_restore 1.2恢复snapshot ...

  4. bzoj3767A+B Problem加强版

    bzoj3767A+B Problem加强版 题意: 求两个数的和,每个数绝对值≤10^(10^7). 题解: 又用Python水过了…… 代码: a=raw_input() b=a.split() ...

  5. 你真的清楚DateTime in C#吗?

    DateTime,就是一个世界的大融合.   日期和时间,在我们开发中非常重要.DateTime在C#中,专门用来表达和处理日期和时间. 本文算是多年使用DateTime的一个总结,包括DateTim ...

  6. 享元模式(c++实现)

    享元模式 目录 享元模式 模式定义 模式动机 UML类图 源码实现 优点 缺点 模式定义 享元模式(Flyweight),运用共享技术有效的支持大量细粒度的对象. 模式动机 如果一个应用使用了大量的对 ...

  7. javascript兼容问题 : let降级到var 遇到的闭包问题的解决方法

    我用  for(let x in y) 循环一个图片元素数组. for (let x in arr) { arr[x].onload = function(){ /* ... */ } } 这样写是没 ...

  8. SQL : 把特定的数据排前面 & 分别查询几组数据的最大值

    把特定的数据排前面 : 比如说,把没有审核身份证的人排最前面,然后再按userId正序排. select case when idcardverified = 1 then 0 else 1 end ...

  9. 利用服务器+jsDelivr+GitHub搭建咱的免费图床

    前言 有人就问了你这个标题写错了?不应该是PicGo+jsDelivr+GitHub搭建咱的免费图床吗? 2333,是一个上传程序啊,不系写错了. 程序介绍 目前程序已实现两种模式上传到GitHub或 ...

  10. 浅谈Python中的深浅拷贝的区别

    深.浅拷贝总结 深拷贝 拷贝可变数据类型,如列表容器: a = [1, 2, [3, 4]] b = copy.deepcopy(a) a 与 b 所指的列表容器的空间地址不一致,即 id(a) != ...