题目描述

为了研究一种新型细菌(称它为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. 二分查找&二叉排序树

    首先我们先来复习一下二分查找的算法 对于正向序列的二分查找 递归实现: bool binary_search(vector<int> &sort_arry,int begin,in ...

  2. postman 进阶技巧

    cookie 清除缓存 code 生成接口自动化测试脚本 响应部分 pretty 响应以json或xml显示 raw 响应以文本显示 preview 以HTML网页行驶显示 断言 断言:用于判断接口请 ...

  3. 爬虫前篇 /https协议原理剖析

    爬虫前篇 /https协议原理剖析 目录 爬虫前篇 /https协议原理剖析 1. http协议是不安全的 2. 使用对称秘钥进行数据加密 3. 动态对称秘钥和非对称秘钥 4. CA证书的应用 5. ...

  4. hihoCoder 1039 字符消除 最详细的解题报告

    题目来源:字符消除 解题思路: 1.在给定字符串中的任意位置插入'A'.'B'.'C'中的任意一个字符,然后计算插入后的字符经过消除后最短的字符串长度: 2.在计算字符消除后最短长度时,智能一遍一遍的 ...

  5. bzoj1787[Ahoi2008]Meet 紧急集合&bzoj1832[AHOI2008]聚会

    bzoj1787[Ahoi2008]Meet 紧急集合 bzoj1832[AHOI2008]聚会 题意: 给个树,每次给三个点,求与这三个点距离最小的点. 题解: 倍增求出两两之间的LCA后,比较容易 ...

  6. GPO - Windows Server Update Services

    Windows Server Update Services Configuration Wizard: Approve procedure of these updates is very tiri ...

  7. MySQL数据库的安装方法

  8. MySQL数据库---库的操作

    MySQL数据库中,以库,表,记录的形式管理所有的数据,安装MySQL数据库的服务器上可以包含多个库,一个库中包含多张表,一张表中包含多条记录.库对应的是文件系统中文件夹的概念,表对应的是文件的概念, ...

  9. vue中引入jq的步骤--以及注意事项

  10. Monster Audio 使用教程 (五) 添加区域效果器

    我们可以在音轨上,某一个时间区域内,添加一组效果器,这组效果器,只有在播放指针进入它的区域时,效果器才可以处理声音 首先,先在时间刻度上,设定好时间范围 然后,在音轨的波形区域点击右键,然后点击[添加 ...