银牛排队


对于我这种蒟蒻来说,还是不要跑一次单元最短路。跑两次好写呀(~ ̄▽ ̄)~

而题目中是有向图。如果如果按照题意进行最短路的话。就会出现一个单终点最短路和一个单起点最短路

对于单起点自然就是套模板,但对于单终点最短路怎么办呢?

显而易见的是,只有一个终点废话呢你(/゚Д゚)/

这样我们就可以反向存一次有向边。将终点变为起点,这样的话就可以套模板了合着就是刷模板题呀(▼⊿▼)

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int head[1001][2];
struct node
{
int point;
int next;
int dist;
};
node line[101000][2];
int tail;
queue<int>q0;
queue<int>q1;
bool exist[1001][2];
int dis[1001][2];
void add(int x,int y,int val,int d)
{
line[++tail][d].point=y;
line[tail][d].dist=val;
line[tail][d].next=head[x][d];
head[x][d]=tail;
}
int main()
{
int n,m,begin;
scanf("%d%d%d",&n,&m,&begin);
for(int i=1;i<=n;i++)
{
head[i][0]=head[i][1]=-1;
dis[i][0]=dis[i][1]=0x7fffffff;
}
int a,b,c;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
add(a,b,c,0);
add(b,a,c,1);
}
int pass;
q0.push(begin);
dis[begin][0]=0;
exist[begin][0]=true;
while(!q0.empty())
{
pass=q0.front();
q0.pop();
exist[pass][0]=false;
int need=head[pass][0];
while(need!=-1)
{
if(dis[line[need][0].point][0]>dis[pass][0]+line[need][0].dist)
{
dis[line[need][0].point][0]=dis[pass][0]+line[need][0].dist;
if(!exist[line[need][0].point][0])
q0.push(line[need][0].point);
}
need=line[need][0].next;
}
}
q1.push(begin);
exist[begin][1]=true;
dis[begin][1]=0;
while(!q1.empty())
{
pass=q1.front();
q1.pop();
exist[pass][1]=false;
int need=head[pass][1];
while(need!=-1)
{
if(dis[line[need][1].point][1]>dis[pass][1]+line[need][1].dist)
{
dis[line[need][1].point][1]=dis[pass][1]+line[need][1].dist;
if(!exist[line[need][1].point][1])
q1.push(line[need][1].point);
}
need=line[need][1].next;
}
}
int ans=-0x7fffff;
for(int i=1;i<=n;i++)
if(i!=begin)
ans=max(ans,dis[i][0]+dis[i][1]);
printf("%d",ans);
}

[USACO07FEB]银牛派对Silver Cow Party---最短路模板题的更多相关文章

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

    P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...

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

    P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...

  3. luogu 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 ...

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

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

  5. 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 ...

  6. 洛谷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 ...

  7. 「Luogu 1821」[USACO07FEB]银牛派对Silver Cow Party

    更好的阅读体验 Portal Portal1: Luogu Portal2: POJ Description One cow from each of N farms \((1 \le N \le 1 ...

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

    银牛派对 正向建图+反向建图, 两边跑dijkstra,然后将结果相加即可. 反向建图以及双向建图的做法是学习图论的必备思想. #include <iostream> #include & ...

  9. 【luogu P1821 [USACO07FEB]银牛派对Silver Cow Party】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1821 反向多存一个图,暴力跑两遍 #include <cstdio> #include < ...

随机推荐

  1. sql查询约束

    写作业的时候发现书上竟然找不到查询约束的语句,百度搜了好久的资料,终于查询成功,在这里记录下来 主键约束 SELECT   tab.name AS [表名],   idx.name AS [主键名称] ...

  2. SharePreferences的用法

    1.创建 sharepreferences的方法: 首先创建该对象: 例如:(注意现在后面的模式7.0可以使用的只有 MODE_PRIVATE,其他全过时了 ) SharedPreferences s ...

  3. MATLAB顺序结构程序和switch实现选择结构

    数据操作 (1)数据输入: A=input(提示信息,选项) (2)数据输出: disp(输出项) (3)程序暂停 pause(延迟秒数)若无内容,则需用户按任意键继续 3.2if语句 整非零为真 矩 ...

  4. loadrunner如何设置所有虚拟用户只运行一次脚本?

    1,设置所有虚拟用户只运行一次脚本 进入场景conroller,如下图设置.初始化和启动Vuser设置都可以,看具体要求,但持续时间一定要选择“完成前一直运行”,这样设置就可以让所有Vuser只运行一 ...

  5. HDU 4081—— Qin Shi Huang's National Road System——————【次小生成树、prim】

    Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3 ...

  6. [Eclipse]自动注释功能

    1) 新建一个file时,加上一些注释的方法. window->preference->java->code     styple->code     template 当你选 ...

  7. jq案例中遇到的知识点总结(会飞的小鸟和三级联动)

    1.会飞的小鸟 ,按键盘的上下左右键,小鸟会上下左右的飞 知识点:1.keyCode 键盘按键对应的数字 比如 左上右下键 对应 37 38 39 40: 2.小鸟的位置:var bBird=$(&q ...

  8. linq to entity 左连接 右连接 以及内连接写法的区别

    左连右连还是内连这个其实你不需要关心.只需要根据实体的映射关系写查询,框架会自动帮你生成的. 至于linq查询语法与扩展方法的效率,应该是一样的,比如: var users=(from u in db ...

  9. Ibatis.net 1.6.2 简单配置及Log4.Net日志记录

    看似简单的Ibatis配置起来注意的地方还挺多.里面的设置及功能还算强大.昨晚配置了半宿,结果一运行还是各种错误.急的直冒汗.果断下载实例去研究.英文不好文档只能作为功能参考. 下面一步步进入Ibat ...

  10. display详细说明

    display:block,inline,inline-block区别 display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可 ...