SPFA cojs 176. [USACO Feb07] 奶牛聚会
cojs 176. [USACO Feb07] 奶牛聚会
★☆ 输入文件:sparty.in 输出文件:sparty.out 简单对比
时间限制:3 s 内存限制:16 MB
N(1 ≤ N ≤ 1000)个农场中的每个农场都有一只奶牛去参加位于第X个农场的聚会.共有M (1 ≤ M ≤ 100,000)条单向的道路,每条道路连接一对农场.通过道路i会花费Ti (1 ≤ Ti ≤ 100)的时间.
作为参加聚会的奶牛必须走到聚会的所在地(农场X).当聚会结束时,还要返回各自的农场.奶牛都是很懒的,她们想找出花费时间最少的路线.由于道路都是单向的,所有她们前往农场X的路线可能会不同于返程的路线.
Of all the cows, what is the longest amount of time a cow must spend walking to the party and back? 对于所有参加聚会的奶牛,找出前往聚会和返程花费总时间最多的奶牛,输出这只奶牛花费的总时间.
输入格式:
- 第1行:三个用空格隔开的整数.
第2行到第M+1行,每行三个用空格隔开的整数:Ai, Bi,以及Ti.表示一条道路的起点,终点和需要花费的时间.
输出格式:
- 唯一一行:一个整数: 所有参加聚会的奶牛中,需要花费总时间的最大值.
样例输出:
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
样例说明:
共有4只奶牛参加聚会,有8条路,聚会位于第2个农场.
第4只奶牛可以直接到聚会所在地(花费3时间),然后返程路线经过第1和第3个农场(花费7时间),总共10时间.
#define N 100100
#include<cstring>
#include<iostream>
using namespace std;
#include<cstdio>
int que[];
int head1[],head2[];
struct Edge{
int v,last,w;
}edge1[N],edge2[N];
int t1=,t2=,n,m,x;
int dis1[],dis2[],ans=;
void add_edge1(int u,int v,int w)
{
++t1;
edge1[t1].v=v;
edge1[t1].w=w;
edge1[t1].last=head1[u];
head1[u]=t1;
}
void add_edge2(int u,int v,int w)
{
++t2;
edge2[t2].v=v;
edge2[t2].w=w;
edge2[t2].last=head2[u];
head2[u]=t2;
}
void input()
{
scanf("%d%d%d",&n,&m,&x);
for(int i=;i<=m;++i)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add_edge1(u,v,w);
add_edge2(v,u,w);
}
}
void SPFA1()
{
bool flag[]={};
memset(flag,false,sizeof(flag));
int head=,tail=;
que[++tail]=x;
flag[x]=true;
memset(dis1,,sizeof(dis1));
dis1[x]=;
while(head<tail)
{
++head;
int p=que[head];
flag[p]=false;
for(int l=head1[p];l;l=edge1[l].last)
{
if(dis1[edge1[l].v]>dis1[p]+edge1[l].w)
{
dis1[edge1[l].v]=dis1[p]+edge1[l].w;
if(!flag[edge1[l].v])
{
++tail;
que[tail]=edge1[l].v;
flag[edge1[l].v]=true;
} }
} }
}
void SPFA2()
{
bool flag[]={};
memset(flag,false,sizeof(flag));
int head=,tail=;
memset(que,,sizeof(que));
que[++tail]=x;
flag[x]=true;
memset(dis2,,sizeof(dis2));
dis2[x]=;
while(head<tail)
{
++head;
int p=que[head];
flag[p]=false;
for(int l=head2[p];l;l=edge2[l].last)
{
if(dis2[edge2[l].v]>dis2[p]+edge2[l].w)
{
dis2[edge2[l].v]=dis2[p]+edge2[l].w;
if(!flag[edge2[l].v])
{
++tail;
que[tail]=edge2[l].v;
flag[edge2[l].v]=true;
} }
} }
}
int main()
{
freopen("sparty.in","r",stdin);
freopen("sparty.out","w",stdout);
input();
SPFA1();
SPFA2();
for(int i=;i<=n;++i)
ans=max(ans,dis1[i]+dis2[i]);
printf("%d\n",ans);
fclose(stdin);fclose(stdout);
return ;
}
SPFA cojs 176. [USACO Feb07] 奶牛聚会的更多相关文章
- cogs 176. [USACO Feb07] 奶牛聚会 dijkstra
176. [USACO Feb07] 奶牛聚会 ★☆ 输入文件:sparty.in 输出文件:sparty.out 简单对比时间限制:3 s 内存限制:16 MB 译: zqzas N ...
- 176. [USACO Feb07] 奶牛聚会
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #defin ...
- 157. [USACO Nov07] 奶牛跨栏
157. [USACO Nov07] 奶牛跨栏(点击转到COGS) 输入文件:hurdles.in 输出文件:hurdles.out 时间限制:1 s 内存限制:128 MB 译 by CmY ...
- cogs 141. [USACO Jan08] 奶牛的选举
141. [USACO Jan08] 奶牛的选举 ★ 输入文件:elect.in 输出文件:elect.out 简单对比时间限制:1 s 内存限制:16 MB 在推翻了Farmer J ...
- 题解 [USACO Mar08] 奶牛跑步
[USACO Mar08] 奶牛跑步 Description Bessie准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她只准备沿着下坡的路跑到池塘,然后走回牛棚. Bessie也不想跑得太远,所 ...
- cogs157. [USACO Nov07] 奶牛跨栏 x
157. [USACO Nov07] 奶牛跨栏 ★★ 输入文件:hurdles.in 输出文件:hurdles.out 简单对比时间限制:1 s 内存限制:128 MB 译 by Cm ...
- 157. [USACO Nov07] 奶牛跨栏(第三次考试大整理)
157. [USACO Nov07] 奶牛跨栏 输入文件:hurdles.in 输出文件:hurdles.out 简单对比 时间限制:1 s 内存限制:128 MB 译 by CmYkRg ...
- usaco 地震 && 奶牛观光
Usaco 地震: Description 一场地震把约翰家的牧场摧毁了,坚强的约翰决心重建家园.约翰已经重建了N个牧场, 现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发现可供修建的道路 ...
- usaco 安慰奶牛
Description 约翰有N个牧场,编号依次为1到N.每个牧场里住着一头奶牛.连接这些牧场的有P条 道路,每条道路都是双向的.第j条道路连接的是牧场Sj和Ej,通行需要Lj的时间.两牧场之 间最多 ...
随机推荐
- Sublime之插件的安装(一)
由于最近刚换了一个工作,所以决定重新申请一个blog,把工作当中遇到的一些问题记录下来,方便自己下次忘记,也希望能与一起需要的小伙伴一起共勉. 如果有不同的观点或者是不同的看法,大家都可以畅谈,我一直 ...
- oracle数据库的date和timestamp类型
1.date类型存储数据的格式为年月日时分秒,可以精确到秒 timestamp类型存储数据的格式为年月日时分秒,可以精确到纳秒(9位) 2.date类型 Date类型的数据可以显示到年月日,也可以显示 ...
- java中参数传递--值传递,引用传递
java中的参数传递——值传递.引用传递 参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递. 在 Java 应用程序中永远不会传递对象,而只传递对象引用. ...
- openssh升级步骤
1下载openssh最新版本 2 configure ./configure --prefix= /ssh先配置一下 再在本地安装. make &makeinstall 3 按照/ssh包含内 ...
- html学习-DOM操作
1.dom介绍 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关 ...
- IOS - Safari中click点击事件无效
做web移动端页面时,安卓端一点问题也没,发现在ios真机上点击事件无效,发现Safari下只有默认可点击的元素才click点击事件,像span div等元素是不具有点击事件的. 解决问题四种方式: ...
- javascript copy text to clipboard
本段代码摘自微软docs网站上,目前需要解决在IE浏览器中触发copy事件的方法,也可以直接调用jquery. <!DOCTYPE html> <html> <head& ...
- vim编码相关
与vim编码相关的四个配置: encoding:vim核心编码,所有vim交换区,信息提示区都用这个编码.打开文件的编码如果是其他编码,会自动转换为核心编码,保存时再转回文件编码. fileencod ...
- HDU 6186 CS Course
保存前缀后缀. 保存一下前缀和后缀,去掉第$i$个位置,就是$L[i-1]$和$R[i+1]$进行运算. #include<bits/stdc++.h> using namespace s ...
- SSM demo :投票系统
框架: Spring SpringMVC MyBatis 题目: 投票系统 导包: 1, spring 2, MyBatis 3, mybatis-spring 4, fastjson 5, aspe ...