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的时间.两牧场之 间最多 ...
随机推荐
- Aragorn's Story 树链剖分+线段树 && 树链剖分+树状数组
Aragorn's Story 来源:http://www.fjutacm.com/Problem.jsp?pid=2710来源:http://acm.hdu.edu.cn/showproblem.p ...
- css3动画详解
一.Keyframes介绍: Keyframes被称为关键帧,其类似于Flash中的关键帧.在CSS3中其主要以“@keyframes”开头,后面紧跟着是动画名称加上一对花括号“{…}”,括号中就是一 ...
- LINUX下解决netstat查看TIME_WAIT状态过多问题(转)
原文连接:www.itokit.com/2012/0516/73950.html # netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c 16 CLOSIN ...
- 一个设置为display:none;的div,在用.height()方法获取不到它的高,获取到的高度为0.
<div style="width:100px;height:100px;background:red;visibility:hidden"></div>/ ...
- systemd服务内容详解
systemd是Linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证下开源发布.其开发目标是提供更优秀的框架以表示系统服务间的依赖关系 ...
- 百度NLP面试题
C++ : 1.拷贝构造函数和重载=符分别在什么情况下被调用,实现有什么区别 2.虚函数的目的,虚函数和模板类的区别,如何找到虚函数 常规算法: 1. 如何输出一个集合的所有真子集,递归和非递 ...
- 【hdoj_1715】大菲波数(大数+100000000进制)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1715 本题采用大数加法即可解决.采用100000000进制速度更快. C++代码如下: #include& ...
- 几个python one-liner
生成斐波那契数列的前10个数,从1开始.若生成前n个,改为range(n-2).代码很简单: List = reduce(lambda x, y: x + [x[-1] + x[-2]], range ...
- js获取url链接地址的参数
访问地址为:http://XXX.com?style=green <script language="javascript"> var getArgs = functi ...
- 【笔试题】Java 中如何递归显示一个目录下面的所有目录和文件?
笔试题 Java 中如何递归显示一个目录下面的所有目录和文件? import java.io.File; public class Test { private static void showDir ...