题解 P5122 【[USACO18DEC]Fine Dining】
思路:最短路+dp
1、先跑一遍最短路,计算出没有干草垛最少要多少时间
2、dp求出有干草垛至少需要多少时间,由于dp有后效性,所以用SPFA辅助转移,dp方程和求最短路一模一样,只是先将有干草垛的拉入队列转移,仅此而已。
代码非常简单,可以说是两遍一模一样的SPFA:
#include<bits/stdc++.h>
#define maxn 1000001
#define INF 1926081700
using namespace std;
long long cnt,cost[maxn],from[maxn],to[maxn],Next[maxn],head[maxn];
long long dis[maxn],dp[maxn],point[maxn],vis[maxn];
long long n,m,k;
queue<long long>q;
void add(long long x,long long y,long long z){
cnt++;cost[cnt]=z;
from[cnt]=x;to[cnt]=y;
Next[cnt]=head[x];head[x]=cnt;
}
void SPFA(long long S){ //SPFA板子
for(int i=1;i<=n;i++)dis[i]=INF,vis[i]=0;
q.push(S);vis[S]=1;dis[S]=0;
while(!q.empty()){
long long u=q.front();q.pop();vis[u]=0;
for(int i=head[u];i!=-1;i=Next[i]){
long long v=to[i];
if(dis[v]>dis[u]+cost[i]){
dis[v]=dis[u]+cost[i];
if(vis[v]==0){
vis[v]=1;
q.push(v);
}
}
}
}
}
void BFS(int S){ //dp
for(int i=1;i<=n;i++)dp[i]=INF,vis[i]=0;
//**************************dp唯一与SPFA不同的地方**************************
for(int i=1;i<=n;i++)
if(point[i]>0){
dp[i]=dis[i]-point[i];
q.push(i);vis[i]=1;
}
//**************************dp唯一与SPFA不同的地方**************************
while(!q.empty()){
long long u=q.front();q.pop();vis[u]=0;
for(int i=head[u];i!=-1;i=Next[i]){
long long v=to[i];
if(dp[v]>dp[u]+cost[i]){
dp[v]=dp[u]+cost[i];
if(vis[v]==0){
vis[v]=1;
q.push(v);
}
}
}
}
}
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
memset(head,-1,sizeof(head));
for(int i=1;i<=n;i++)point[i]=0;
scanf("%lld%lld%lld",&n,&m,&k);
for(int i=1;i<=m;i++){
long long x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
add(x,y,z);add(y,x,z); //建边
}
SPFA(n);
for(int i=1;i<=k;i++){
long long x,y;
scanf("%lld%lld",&x,&y);
point[x]=max(point[x],y); //加入干草垛
}
BFS(n);
for(int i=1;i<=n-1;i++){
if(dp[i]<=dis[i]) //判断,输出
printf("1\n");
else
printf("0\n");
}
return 0;
}
题解 P5122 【[USACO18DEC]Fine Dining】的更多相关文章
- Luogu P5122 [USACO18DEC]Fine Dining 最短路
先跑一遍n为起点最短路,再新开一个点,向有干草垛的点连一根边权为d[u]-w的有向边(很重要..我当时连的无向边,然后我死了.),相当于用价值抵消一部分边权, 然后以这个新的点为起点跑最短路就好了.. ...
- [USACO18DEC]Fine Dining
题面 \(Solution:\) 一开始想的是先跑一遍最短路,然后拆点之后再跑一遍,比较两次dis,然后发现拆点后会有负环(可能是我没想对拆点的方法),于是就放弃了拆点法. 我们考虑强制让每头牛选择走 ...
- [题解](最短路)luogu_P5122 Fine Dining
首先理解这里的美味值相当于给你更多时间让你经过这个草垛的, 也就是在经过草垛时可以给你的时间减少w[i],这样能否比最短路不慢 然而我们并不容易知道怎么走才是最好的,所以要想办法避免找这个方案 我们新 ...
- USACO比赛题泛刷
随时可能弃坑. 因为不知道最近要刷啥所以就决定刷下usaco. 优先级排在学习新算法和打比赛之后. 仅有一句话题解.难一点的可能有代码. 优先级是Gold>Silver.Platinum刷不动. ...
- [USACO 2018 December Contest]作业总结
t1 Convention 题目大意 每一头牛都有一个来的时间,一共有\(n\)辆车,求出等待时间最长的那头牛等待的最小时间. 解法 第一眼看到这道题还以为是\(2018noip\)普及组的t3魔鬼题 ...
- FOOD
Serving order of food courses(上菜顺序)1. Appetizer(starter)2. Main Course3. Dessert Style of cooking1. ...
- 【托业】【新托业TOEIC新题型真题】学习笔记12-题库八-P7
155.political figure 政治人物 prominent 160.association n.协会,社团; 联合,联系; 联想; rarely adv.很少地; 罕有地; 极精彩地; 珍 ...
- The 10 Best Neighborhoods in Seattle
https://www.seattlemet.com/articles/2015/4/24/the-10-best-neighborhoods-in-seattle-may-2015 By Darre ...
- 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码
洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...
随机推荐
- 吴裕雄 python 神经网络——TensorFlow 花瓣分类与迁移学习(3)
import glob import os.path import numpy as np import tensorflow as tf from tensorflow.python.platfor ...
- JQuery 移动端 上下 滑动 切换 插件 pageSlider
HTML <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta ...
- vue.js ③
1.组件使用的细节点 H5编码中的规范是tr必须在tbody里所以不能直接套用<row></row>的写法,<ul>标签下支持<li>,select标签 ...
- sql语句插入时提示:“Duplicate entry 'XXX' for key 1 ” 是什么原因?
你用的是MYSQL 数据库吧? 1:提示信息翻译:插入 xxx 使索引1重复分析:索引如果是primary unique这两两种,那么数据表的数据对应的这个字段就必须保证其每条记录的唯一性.否则就会产 ...
- office 格式定义
在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串转换成 科学计数法.现在网上找到解决方案之一: (在数字串 ...
- SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xd0 in position 2: invalid continuation byte
[root@hostuser src]# python3 subprocess_popen.py File "subprocess_popen.py", line 23Syntax ...
- IIS7和IIS8环境下 ThinkPHP专用URL Rewrite伪静态规则
这是适用于IIS7,IIS7.5,IIS8.0及以上的ThinkPHP的伪静态规则,把以下代码保存成web.config文件,放到FTP的web目录内即可. <?xml version=&q ...
- JUnit + Mockito 单元测试
原 JUnit + Mockito 单元测试(二) 2015年01月05日 17:26:02 sp42a 阅读数:60755 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- P1029最大公约数和最小公倍数
P1029最大公约数和最小公倍数 #include <iostream> #include <cmath> #include <algorithm> #define ...
- Servlet 学习(九)
Listener 1.功能 Servlet 2.3 中新增加的另一个功能 作用是监听Java Web 程序中的事件 对应设计模式中的Listener 模式,当事件发生的时候会自动触发该事件对应的Lis ...