题目描述

寒假到了,\(n\) 头牛都要去参加一场在编号为 \(x\) 的牛的农场举行的派对,农场之间有 \(m\) 条有向路,每条路都有一定的长度。

每头牛参加完派对后都必须回家,无论是去参加派对还是回家,每头牛都会选择最短路径,求这 \(n\) 头牛的最短路径(一个来回)中最长的一条路径长度。

输入格式

第一行有三个整数,分别表示牛的数量 \(n\),道路数 \(m\) 和派对农场编号 \(x\)。

接下来 \(m\) 行,每行三个整数 \(u, v, w\),表示存在一条由 \(u\) 通向 \(v\) 的长度为 \(w\) 的道路。

输出格式

输出一行一个整数表示答案。

样例 #1

样例输入 #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

样例输出 #1

10

提示

样例 1 解释

数据规模与约定

对于全部的测试点,保证 \(1 \leq x \leq n \leq 10^3\),\(1 \leq m \leq 10^5\),\(1 \leq u,v \leq n\),\(1 \leq w \leq 10^2\),保证从任何一个结点出发都能到达 \(x\) 号结点,且从 \(x\) 出发可以到达其他所有节点。

考虑最短路,先从起始点跑一边dijkstra,然后把所有的边反过来,再跑一边dijkstra,我们就可以知道每个点一来一回的距离。找个最大的就可以了。

不要用SPFA,n*m会爆。

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N=1e6+5;
int n,m;
int head[N];
int u[N],v[N],x;
long long w[N],dis[N],ret[N];
struct edge{
int v,nxt;
long long w;
}e[N];
int idx;
void add_edge(int u,int v,int w)
{
e[++idx].v=v;
e[idx].w=w;
e[idx].nxt=head[u];
head[u]=idx;
}
struct node{
int v;
long long dis;
bool operator<(const node&n)const{
return dis>n.dis;
}
};
priority_queue<node>pq;
bool vis[N];
void dijskra(int s)
{
dis[s]=0;
pq.push((node){s,0});
while(!pq.empty())
{
int k=pq.top().v;
pq.pop();
if(vis[k])
continue;
vis[k]=1;
for(int i=head[k];i;i=e[i].nxt)
{
if(!vis[e[i].v]&&dis[e[i].v]>dis[k]+e[i].w)
{
dis[e[i].v]=dis[k]+e[i].w;
pq.push((node){e[i].v,dis[e[i].v]});
}
}
}
}
long long ans;
int main()
{
cin>>n>>m>>x;
for(int i=1;i<=m;i++)
{
cin>>u[i]>>v[i]>>w[i];
add_edge(u[i],v[i],w[i]);
}
memset(dis,1,sizeof(dis));
dijskra(x);
memcpy(ret,dis,sizeof(dis));
memset(dis,1,sizeof(dis));
memset(head,0,sizeof(head));
memset(vis,0,sizeof(vis));
idx=0;
for(int i=1;i<=m;i++)
add_edge(v[i],u[i],w[i]);
dijskra(x);
for(int i=1;i<=n;i++)
ans=max(ans,ret[i]+dis[i]);
cout<<ans<<endl;
}

[USACO2007FEBS] Cow Party S的更多相关文章

  1. POJ 3278 Catch That Cow(bfs)

    传送门 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 80273   Accepted: 25 ...

  2. 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心

    SB贪心,一开始还想着用二分,看了眼黄学长的blog,发现自己SB了... 最小道路=已选取的奶牛/道路总数. #include <iostream> #include <cstdi ...

  3. HDU Cow Sorting (树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2838 Cow Sorting Problem Description Sherlock's N (1  ...

  4. [BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居

    [BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 试题描述 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发 ...

  5. 细读cow.osg

    细读cow.osg 转自:http://www.cnblogs.com/mumuliang/archive/2010/06/03/1873543.html 对,就是那只著名的奶牛. //Group节点 ...

  6. POJ 3176 Cow Bowling

    Cow Bowling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13016   Accepted: 8598 Desc ...

  7. raw,cow,qcow,qcow2镜像的比较

    在linux下,虚拟机的选择方式有很多,比如vmware for linux,virtual box,还有qemu,在以前,使用qemu的人不多,主要是使用起来有些麻烦,但现在随着Openstack的 ...

  8. poj1985 Cow Marathon (求树的直径)

    Cow Marathon Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 3195   Accepted: 1596 Case ...

  9. (01背包变形) Cow Exhibition (poj 2184)

    http://poj.org/problem?id=2184   Description "Fat and docile, big and dumb, they look so stupid ...

  10. 图论 ---- spfa + 链式向前星 ---- poj 3268 : Silver Cow Party

    Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12674   Accepted: 5651 ...

随机推荐

  1. shell编程之存储读写测试实战脚本

    Shell编程是一种在命令行环境中编写程序的技术,常用于Linux和Unix系统.它主要使用Shell脚本语言来编写程序.Shell编程常用于系统管理.自动化任务.批处理等领域. 常用的Shell脚本 ...

  2. 一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明. 问题现象 7月25号,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值8 ...

  3. KRPANO资源分析工具下载720THINK全景图

    提示:目前分析工具中的全景图下载功能将被极速全景图下载大师替代,相比分析工具,极速全景图下载大师支持更多的网站(包括各类KRPano全景网站,和百度街景) 详细可以查看如下的链接: 极速全景图下载大师 ...

  4. tree-test

    #include <iostream> #include <stack> using namespace std; typedef struct BiTNode{ char d ...

  5. mysqlbinlog输出sql

    ./mysqlbinlog -v --base64-output=DECODE-ROWS ~/Downloads/tymysql2|grep -A4 'ALTER' >~/Downloads/a ...

  6. 「codeforces - 868F」Yet Another Minimization Problem

    link. 值域分治优化决策单调性 DP 的 trick.朴素做法 trivial,不赘述. 考虑求取一个区间 \([l,r]\) 的 DP 值.先搞定在 \(m=\lfloor\frac{l+r}{ ...

  7. Solution -「CF 1477A」Nezzar and Board

    Description Link. $ n $ distinct integers $ x_1,x_2,\ldots,x_n $ are written on the board. Nezzar ca ...

  8. 使用Vue3+elementPlus的Tree组件实现一个拖拽文件夹管理

    目录 1.前言 2.分析 3. 实现 4.踩坑 4.1.拖拽辅助线的坑 4.2.数据的坑 4.3.限制拖拽 4.4.样式调整 1.前言 最近在做一个文件夹管理的功能,要实现一个树状的文件夹面板.里面包 ...

  9. 查看docker容器使用的cpu和内存

    转载请注明出处: 使用docker ps命令列出正在运行的Docker容器,并获取目标容器的ID或名称. 使用docker stats <容器ID或名称>命令来实时监测指定容器的资源使用情 ...

  10. 【稳定性】关于缩短MTTR的探索

    一.什么是 MTTR ? 当系统出现系统故障时,我们需要通过一些指标来衡量故障的严重程度和影响范围.其中MTTR(Mean Time To Repair 名为_平均修复时间_)是一个非常重要的指标,它 ...