[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 < ...
随机推荐
- python-综合练习题(if条件语句,while循环,奇数偶数
练习题: 1.使用while循环输入1 2 3 4 5 6 8 9 10 2.求1-100的所有数的和 3.输出1-100内所有的奇数 4.输出1-100内所有的偶数 5.求1-2+3-4+ ...
- Dropping tests
题目链接:http://poj.org/problem?id=2976 Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total S ...
- 利用划分树求解整数区间内第K大的值
如何快速求出(在log2n的时间复杂度内)整数区间[x,y]中第k大的值(x<=k<=y)? 其实我刚开始想的是用快排来查找,但是其实这样是不行的,因为会破坏原序列,就算另外一个数组来存储 ...
- [OpenStack] [Liberty] Neutron单网卡桥接模式访问外网
环境配置: * Exsi一台 * Exsi创建的单网卡虚拟机一台 * Ubuntu 14LTS 64位操作系统 * OpenStack Liberty版本 * 使用Neutron网络而非Nova网络 ...
- 错误提示”void is an invalid type for the variable“
今晚做android作业,出现错误提示:void is an invalid type for the variable, invalid:无效的 variable:变量,在网上找了一下后知道是 方 ...
- node.js运行环境变量配置
-----Windows cmd---------- 1. echo %PATH% 输出Path环境变量 2.set NODE_ENV=testing 定义环境变量 3.echo %NODE_ENV ...
- Vue.js基础语法(三)
vue学习的一系列,全部来自于表哥---表严肃,是我遇到过的讲课最通透,英文发音最好听的老师,想一起听课就去这里吧 https://biaoyansu.com/i/hzhj1206 1过滤器filte ...
- python反爬之网页局部刷新1
# ajax动态加载网页 # 怎样判断一个网页是不是动态加载的呢? # 查看网页源代码,如果源码中没有你要的数据,尝试访问下一页,当你点击下一页的时候,整个页面没有刷新, 只是局部刷新了,很大的可能是 ...
- Android - 页面返回上一页面的三种方式
今年刚刚跳槽到了新公司,也开始转型做Android,由此开始Android的学习历程. 最近在解很多UI的bug,在解bug过程中,总结了在UI的实现过程中,页面返回上一页面的几种实现方式. 一. 自 ...
- Javascript基础--运算符与表达式
一.运算符 1.运算符分类: 按功能:算术运算符:+.-.*./.%.++.-- 例:12+12-11+5*6+20/5+5%2+(5%-2)+(-5++2)+(a++)+(++a)+(--a)+(a ...