农场派对(party)(信息学奥赛一本通 1497)
【题目描述】
N(1≤N≤1000)头牛要去参加一场在编号为 x(1≤x≤N) 的牛的农场举行的派对。有 M(1≤M≤100000) 条有向道路,每条路长 Ti(1≤Ti≤100);每头牛都必须参加完派对后回到家,每头牛都会选择最短路径。求这 N头牛的最短路径(一个来回)中最长的一条的长度。 特别提醒:可能有权值不同的重边。
【输入】
第 1行:3 个空格分开的整数 N,M,X;
第 2…M 行:3 个空格分开的整数 Ai,Bi,Ti ,表示有一条从 Ai 到 Bi的路,长度为 Ti。
【输出】
一行一个数,表示最长最短路的长度(<231-1)。
【输入样例】
4 8 2
1 2 4
1 3 2
1 4 7
2 1 1
2 3 5
3 1 2
3 4 4
4 2 3
【输出样例】
10
用spfa求从x到各点的最短路径(di[i])以及从各点到x的最短路径(d[x]),并用邻接表进行优化
#include<bits/stdc++.h>
using namespace std;
struct node{
int to,next,w;
}a[];
queue<int>q;
int n,m,x,num,head[],ma=-,mi,cnt;
int d[],z[][],di[];
bool b[];
void add(int from,int to,int w)
{
a[++cnt].to=to;
a[cnt].next=head[from];
a[cnt].w=w;
head[from]=cnt;
}
void spfa(int s)
{
memset(d,,sizeof(d));
d[s]=;b[s]=true;
q.push(s);
while(!q.empty())
{
int u=q.front();q.pop();
for(int i=head[u];i;i=a[i].next)
{
int to=a[i].to;
if(d[to]>d[u]+a[i].w)
{
d[to]=d[u]+a[i].w;
if(!b[to])
{
b[to]=true;
q.push(to);
}
}
}
b[u]=false;//别忘了这句话
}
}
int main()
{
//freopen("party.in","r",stdin);
//freopen("party.out","w",stdout);
cin>>n>>m>>x;
for(int i=;i<=m;i++)
{
int a,b,c;
cin>>a>>b>>c;
add(a,b,c);
}
spfa(x);//从x到各点的最短路径
memcpy(di,d,sizeof d);//将数组d的值全部复制给di
for(int i=;i<=n;i++)
{
if(i!=x)
{
spfa(i);//各点到x的最短路径
ma=max(ma,d[x]+di[i]);//求最短中的最长
}
}
cout<<ma;
return ;
}
农场派对(party)(信息学奥赛一本通 1497)的更多相关文章
- $ybt\ 【信息学奥赛一本通】题解目录$
[信息学奥赛一本通]题解目录 $ \large -> OJ$ $ problem1000 $ \(Answer\) - > $ \large 1000$ $ problem1001 $ \ ...
- 2019寒假练题计划——LibreOJ刷题计划 &《信息学奥赛一本通》提高版题目
目录 2019.1.27 #10082. 「一本通 3.3 例 1」Word Rings 题意 思路 #10083. 「一本通 3.3 例 2」双调路径 题意 思路 #10084. 「一本通 3.3 ...
- 【信息学奥赛一本通】第三部分_队列 ex2_3produce 产生数
给出一个整数n(n<=2000)(代码可适用n<=10^31)和k个变换规则(k<=15). 规则:1.1个数字可以变换成另1个数字: 2.规则中右边的数字不能为零. BFS #in ...
- 信息学奥赛一本通算法(C++版)基础算法:高精度计算
高精度加法(大位相加) #include <bits/stdc++.h> using namespace std; int main() { ],b1[]; ],b[],c[];//a,b ...
- 食物链【NOI2001】(信息学奥赛一本通 1390)
[题目描述] 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种 ...
- Biorhythms(信息学奥赛一本通 1639)
题目描述: 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰,人会思维敏 ...
- 信息学奥赛一本通 提高篇 序列第k个数 及 快速幂
我是传送门 这个题首先是先判断是等差还是等比数列 等差的话非常简单: 前后两个数是等差的,举个栗子: 3 6 9 12 这几个数,(我感觉 1 2 3 4并说明不了什么) 每次都加3嘛,很容易看出,第 ...
- 【NOI2002】荒岛野人(信息学奥赛一本通 1637)(洛谷 2421)
题目描述 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi ...
- X-factor Chain(信息学奥赛一本通 1628)
题目描述 输入正整数 x,求 x 的大于 1 的因子组成的满足任意前一项都能整除后一项的序列的最大长度,以及满足最大长度的序列的个数. 输入 多组数据,每组数据一行,包含一个正整数 x. 对于全部数据 ...
随机推荐
- custom drawer
import 'package:flutter/material.dart'; main() => runApp(MaterialApp( home: HomePage(), )); class ...
- SpringBoot之多Profile配置
近来在利用闲暇时间巩固下SpringBoot的基本知识,然后自己也做一些笔记,整理下当时所学知识,后面就干脆写到这里来了. 多Profile配置文件 在SpringBoot主配置文件编写的时候,文件名 ...
- GoogleMap增加标记和路线轨迹的方法
声明:本文基于JavaScript环境编写. 前言 按照目前的项目需求,我们需要在谷歌地图上标记出当前仓库的位置.司机补货的行车路径.司机当前班次需要补货的机器的位置,同时根据补货状态的不同标记成不同 ...
- github上传本地项目代码
进入github首页,点击新项目new repository,如下图所示: 然后进入如下页面,填写信息: 最后点击Create repository,生成如下页面: 红色圈圈画的步骤,先点击Clone ...
- Java项目之查询后分页
一.Jsp页面: <%@ page language="java" contentType="text/html; charset=UTF-8" page ...
- 初次尝试vue脚手架
1.第一步首先安装NodeJs ,从nodejs 官网去down,然后安装 安装完成后,我安装了GIT 自己从官网去下载进行安装 2.检查安装是否成功,windows+r -> cmd,输入 ...
- centos 宝塔 使用命令行快速导入数据库sql
先将sql文件上传到服务器,例如上传到www文件夹 然后打开命令行工具 输入 mysql -u 数据库用户名 -p 然后复制密码进去 然后输入 use 数据库名 回车 然后输入 source /www ...
- mysql应用
1. 简述 MySQL是开源的关系型数据库.官网:https://dev.mysql.com/. 2. 安装及应用 可通过https://dev.mysql.com/downloads/下载MyS ...
- reboot 示例代码
#include <stdio.h> #define LINUX_REBOOT_CMD_RESTART 0x01234567 int main() { reboot(LINUX_REBOO ...
- 监控服务zabbix部署
目录 1. zabbix介绍 2. zabbix特点 3. zabbix配置文件 4. 部署zabbix 4.1 zabbix服务端安装 4.2 zabbix服务端配置 4.3 zabbix服务端we ...