[USACO07FEB]银牛派对Silver Cow Party---最短路模板题
银牛排队
对于我这种蒟蒻来说,还是不要跑一次单元最短路。跑两次好写呀(~ ̄▽ ̄)~
而题目中是有向图。如果如果按照题意进行最短路的话。就会出现一个单终点最短路和一个单起点最短路
对于单起点自然就是套模板,但对于单终点最短路怎么办呢?
显而易见的是,只有一个终点废话呢你(/゚Д゚)/
这样我们就可以反向存一次有向边。将终点变为起点,这样的话就可以套模板了合着就是刷模板题呀(▼⊿▼)
#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---最短路模板题的更多相关文章
- 洛谷——P1821 [USACO07FEB]银牛派对Silver Cow Party
P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...
- 洛谷 P1821 [USACO07FEB]银牛派对Silver Cow Party 题解
P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...
- 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 ...
- [USACO07FEB]银牛派对Silver Cow Party
题目简叙: 寒假到了,N头牛都要去参加一场在编号为X(1≤X≤N)的牛的农场举行的派对(1≤N≤1000),农场之间有M(1≤M≤100000)条有向路,每条路长Ti(1≤Ti≤100). 每头牛参加 ...
- 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 ...
- 洛谷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 ...
- 「Luogu 1821」[USACO07FEB]银牛派对Silver Cow Party
更好的阅读体验 Portal Portal1: Luogu Portal2: POJ Description One cow from each of N farms \((1 \le N \le 1 ...
- 洛谷 P1821 [USACO07FEB]银牛派对Silver Cow Party
银牛派对 正向建图+反向建图, 两边跑dijkstra,然后将结果相加即可. 反向建图以及双向建图的做法是学习图论的必备思想. #include <iostream> #include & ...
- 【luogu P1821 [USACO07FEB]银牛派对Silver Cow Party】 题解
题目链接:https://www.luogu.org/problemnew/show/P1821 反向多存一个图,暴力跑两遍 #include <cstdio> #include < ...
随机推荐
- UGUI EventSystem.current.IsPointerOverGameObject(),判断是否进入了UI上
EventSystem.current.IsPointerOverGameObject(); //返回一个布尔值,进入了UI上就返回true,用的时候要 using UnityEngine.Event ...
- Quartz使用(2) - Quartz核心接口Scheduler、Job
quartz的核心接口如下: 接口 含义 Scheduler scheduler的主要API接口 Job 任务实现接口,期望调度器能够执行 JobDetail 用于定义Job实例 Trigger 调度 ...
- c++隐式类型转换和explicit
什么是隐式转换? 众所周知,C++的基本类型中并非完全的对立,部分数据类型之间是可以进行隐式转换的. 所谓隐式转换,是指不需要用户干预,编译器私下进行的类型转换行为.很多时候用户可能都不知道进行了哪些 ...
- Asp.Net Mvc: 应用BindAttribute
环境: Windows 2008, VS 2008 SP1, Asp.Net Mvc RC1 ----------------------------------------------------- ...
- C# 多线程之线程同步
多线程间应尽量避免同步问题,最好不要线程间共享数据.如果必须要共享数据,就需要使用同步技术,确保一次只有一个线程访问和改变共享状态. 一::lock语句 lock语句事设置锁定和接触锁定的一种简单方法 ...
- vueHistory 模式下,布置到服务器上路由刷新会报nginx404错误
之前写完vue项目后,布置到服务器,用nginx反向代理后,一开始进去,进各种路由都是没问题的,但是一旦f5刷新后就会出现一个nginx404的错误. 经过翻阅vue文档后,发现这是vueHistor ...
- 各种推导式<"一行能解决的事,为什么要用那么多行">
一.推导式 1.列表:[结果 for循环 条件筛选] 2.字典:{k:v for循环 条件筛选} 3.集合推导式{k for循环 条件筛选} ???为什么没有元组推导式 二.生成器表达式(元组表达式) ...
- DOMNodeInserted,DOMNodeRemoved 和监听内容变化插件
元素的增加 删除 及事件监听 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- javascript中如何实现继承
javascript中如何实现继承 // 原型方式的'继承' function Person(name) { //定义一个Person的构造函数 this.name = name; //添加属性 } ...
- CSS3的Animation
1.animation-name :动画名 2.animation-duration:时间 3.animation-delay:延时 4.animation-iteration-co ...