题目描述

One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads connects pairs of farms; road i requires Ti (1 ≤ Ti ≤ 100) units of time to traverse.

Each cow must walk to the party and, when the party is over, return to her farm. Each cow is lazy and thus picks an optimal route with the shortest time. A cow's return route might be different from her original route to the party since roads are one-way.

Of all the cows, what is the longest amount of time a cow must spend walking to the party and back?

寒假到了,N头牛都要去参加一场在编号为X(1≤X≤N)的牛的农场举行的派对(1≤N≤1000),农场之间有M(1≤M≤100000)条有向路,每条路长Ti(1≤Ti≤100)。

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

输入输出格式

输入格式:

第一行三个整数N,M, X;

第二行到第M+1行:每行有三个整数Ai,Bi, Ti ,表示有一条从Ai农场到Bi农场的道路,长度为Ti。

输出格式:

一个整数,表示最长的最短路得长度。

输入输出样例

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

说明

题解:正反两个方向建图,跑两遍SPFA即可。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int oo=0x3f3f3f3f;
int n,m,x,y,z,kun;
int d1[100005],vis[100005];
int d2[100005];
struct node{int to;int next;int val;
}e1[100005];
node e2[100005];
int h1[100005];
int h2[100005];
int cnt1,cnt2;
void add(int a,int b,int c){cnt1++;e1[cnt1].to=b;e1[cnt1].val=c;e1[cnt1].next=h1[a];h1[a]=cnt1;cnt2++;e2[cnt2].to=a;e2[cnt2].val=c;e2[cnt2].next=h2[b];h2[b]=cnt2;
}void cai(){queue<int>q;memset(vis,0,sizeof(vis));//memset(q,0,sizeof(q));
    q.push(kun);d1[kun]=0;vis[kun]=1;while(!q.empty()){x=q.front();q.pop();vis[x]=0;for(int i=h1[x];i;i=e1[i].next){int v=e1[i].to;if(d1[v]>d1[x]+e1[i].val){d1[v]=d1[x]+e1[i].val;if(vis[v]==0){q.push(v);vis[v]=1;}}}}
}void xu(){queue<int>q;memset(vis,0,sizeof(vis));//memset(q,0,sizeof(q));
    q.push(kun);d2[kun]=0;vis[kun]=1;while(!q.empty()){x=q.front();q.pop();vis[x]=0;for(int i=h2[x];i;i=e2[i].next){int v=e2[i].to;if(d2[v]>d2[x]+e2[i].val){d2[v]=d2[x]+e2[i].val;if(vis[v]==0){q.push(v);vis[v]=1;}}}}
}
int main(){freopen("1821.in","r",stdin);freopen("1821.out","w",stdout);scanf("%d %d %d",&n,&m,&kun);for(int i=1;i<=m;i++){scanf("%d %d %d",&x,&y,&z);add(x,y,z); }for(int i=1;i<=n;i++)d1[i]=d2[i]=oo;cai(); xu();int ans=0;for(int i=1;i<=n;i++)ans=max(ans,d1[i]+d2[i]);printf("%d",ans);/*int mx=0;int id=0;for(int i=1;i<=n;i++)if(d2[i]>mx){ mx=d2[i]; id=i; } printf("%d %d ",id,mx);int ans=0;for(int i=1;i<=n;i++)ans+=(mx==d2[i]);printf("%d",ans);*/return 0;
}

转载于:https://www.cnblogs.com/wuhu-JJJ/p/11178996.html

【洛谷 1821】银牛派对Silver Cow Party相关推荐

  1. 洛谷 P1821 [USACO07FEB]银牛派对Silver Cow Party

    题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the b ...

  2. 洛谷P1821 [USACO07FEB]银牛派对Silver Cow Party

    题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the b ...

  3. [USACO07FEB]银牛派对Silver Cow Party

    题目简叙: 寒假到了,N头牛都要去参加一场在编号为X(1≤X≤N)的牛的农场举行的派对(1≤N≤1000),农场之间有M(1≤M≤100000)条有向路,每条路长Ti(1≤Ti≤100). 每头牛参加 ...

  4. [USACO07FEB]银牛派对Silver Cow Party---最短路模板题

    银牛排队 对于我这种蒟蒻来说,还是不要跑一次单元最短路.跑两次好写呀(- ̄▽ ̄)- 而题目中是有向图.如果如果按照题意进行最短路的话.就会出现一个单终点最短路和一个单起点最短路 对于单起点自然就是套模 ...

  5. [Luogu1821][USACO07FEB]银牛派对Silver Cow Party

    由题意可知,我们需要求的是很多个点到同一个店的最短距离,然后再求同一个点到很多个点的最短距离. 对于后者我们很好解决,就是很经典的单源最短路径,跑一边dijkstra或者SPFA即可. 然而对于前者, ...

  6. 题解 洛谷 P3069 [USACO13JAN]牛的阵容Cow Lineup

    洛谷P3069[USACO13JAN]牛的阵容CowLineup\color{#00F}{洛谷\ P3069\ [USACO13JAN]牛的阵容Cow Lineup}洛谷 P3069 [USACO13 ...

  7. 洛谷 3029 [USACO11NOV]牛的阵容Cow Lineup

    https://www.luogu.org/problem/show?pid=3029 题目描述 Farmer John has hired a professional photographer t ...

  8. 洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game

    洛谷 2953  [USACO09OPEN]牛的数字游戏Cow Digit Game 题目描述 Bessie is playing a number game against Farmer John, ...

  9. 洛谷P2879 [USACO07JAN]区间统计Tallest Cow

    洛谷P2879 [USACO07JAN]区间统计Tallest Cow 题目描述 给出牛的可能最高身高,然后输入m组数据 a b,代表a,b可以相望,最后求所有牛的可能最高身高输出 输入输出格式 输入 ...

最新文章

  1. node读写本地文件
  2. 全面对比 Redis 和 Memcached 的 6 点区别
  3. 随机数排列JAVA_随机数生成器,按排序顺序
  4. 软件架构阅读笔记11
  5. 数据结构——基于 Dijsktra 算法的最短路径求解
  6. element手机验证格式_vue封装 element-ui form表单验证 正则匹配手机号 自定义校验表格内容...
  7. 高效研发运维体系构建的流程和方法论
  8. (3)插入排序之一 直接插入排序
  9. Python图形用户界面、图形绘制
  10. 能够生成动态图片的R模块:rCharts
  11. FTOUR2 - Free tour II
  12. VirtualBox备份Vagrant虚拟机镜像
  13. 白话布隆过滤器(BloomFilter)
  14. javascript中正则匹配多个条件, 常用正则匹配, 正则详解
  15. 写在今年(2022)清明节前
  16. flutter ListView.separated 带分割线
  17. mysql服务器cpu使用率过高100%
  18. 2018年计算机考证时间
  19. excel整列动态联动下拉_在Excel下拉列表中显示多列
  20. 利用二次导数对函数凹凸性的证明

热门文章

  1. 2022最经典送朋友的生日祝福短信【精】
  2. html鼠标滑入滑出效果,CSS3创建一个滑出滑入的动画
  3. 程序设计c语言杨艳丽,2015.04.15数学组:杨艳丽老师公开课:《4.1用字母表示数》...
  4. opencc php,Opencc 使用
  5. 使用 XHLaunchAd 快速实现app启动广告
  6. STM32 FSMC 详解
  7. 初学PracticalAI
  8. 兮米安装包制作工具 制作bin包 教程
  9. 初学ROS(VMware Ubuntu18.04)问题解决篇(一)
  10. 性能测试指标、性能测试术语