思路:最短路+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】的更多相关文章

  1. Luogu P5122 [USACO18DEC]Fine Dining 最短路

    先跑一遍n为起点最短路,再新开一个点,向有干草垛的点连一根边权为d[u]-w的有向边(很重要..我当时连的无向边,然后我死了.),相当于用价值抵消一部分边权, 然后以这个新的点为起点跑最短路就好了.. ...

  2. [USACO18DEC]Fine Dining

    题面 \(Solution:\) 一开始想的是先跑一遍最短路,然后拆点之后再跑一遍,比较两次dis,然后发现拆点后会有负环(可能是我没想对拆点的方法),于是就放弃了拆点法. 我们考虑强制让每头牛选择走 ...

  3. [题解](最短路)luogu_P5122 Fine Dining

    首先理解这里的美味值相当于给你更多时间让你经过这个草垛的, 也就是在经过草垛时可以给你的时间减少w[i],这样能否比最短路不慢 然而我们并不容易知道怎么走才是最好的,所以要想办法避免找这个方案 我们新 ...

  4. USACO比赛题泛刷

    随时可能弃坑. 因为不知道最近要刷啥所以就决定刷下usaco. 优先级排在学习新算法和打比赛之后. 仅有一句话题解.难一点的可能有代码. 优先级是Gold>Silver.Platinum刷不动. ...

  5. [USACO 2018 December Contest]作业总结

    t1 Convention 题目大意 每一头牛都有一个来的时间,一共有\(n\)辆车,求出等待时间最长的那头牛等待的最小时间. 解法 第一眼看到这道题还以为是\(2018noip\)普及组的t3魔鬼题 ...

  6. FOOD

    Serving order of food courses(上菜顺序)1. Appetizer(starter)2. Main Course3. Dessert Style of cooking1. ...

  7. 【托业】【新托业TOEIC新题型真题】学习笔记12-题库八-P7

    155.political figure 政治人物 prominent 160.association n.协会,社团; 联合,联系; 联想; rarely adv.很少地; 罕有地; 极精彩地; 珍 ...

  8. The 10 Best Neighborhoods in Seattle

    https://www.seattlemet.com/articles/2015/4/24/the-10-best-neighborhoods-in-seattle-may-2015 By Darre ...

  9. 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码

    洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...

随机推荐

  1. XCOJ 1008: 级数求和

    1008: 级数求和 题目描述 已知:Sn= 1+1/2+1/3+…+1/n.显然对于任意一个整数K,当n足够大的时候,Sn大于K.现给出一个整数K(1<=k<=15),要求计算出一个最小 ...

  2. Codeforces Round #566 (Div. 2)C(字符串,SET)

    #include<bits/stdc++.h>using namespace std;string s[100007];set<int>st[100007][7];int t[ ...

  3. case语句!

    1.case 语句概述(1)case 语句的作用使用 case 语句改写 if 多分支可以使脚本结构更加清晰.层次分明.针对变量的不同取值,执行不同的命令序列.2.case 语句的结构:case 变量 ...

  4. ES建立索引步骤, 1,index 2.mapping 3,别名

    1.建立索引PUT /index_trans_detail 2.建立mappingPOST /index_trans_detail/type_trans_detail/_mapping{ " ...

  5. i.MX RT600之I2S外设介绍及应用

    恩智浦的i.MX RT600是跨界处理器产品,同样也是i.MX RTxxx系列的开山之作.不同于i.MX RT1xxx系列单片机,i.MX RT600 采用了双核架构,将新一代Cortex-M33内核 ...

  6. Vue中全局监听键盘事件

    全局监听enter键,是把监听事件绑定到document上 常用的keyCode键盘编码在这里:https://www.cnblogs.com/wbyixx/p/12029508.html creat ...

  7. SpringBoot+JWT+SpringSecurity+MybatisPlus实现Restful鉴权脚手架

    若图片查看异常,请前往掘金查看:https://juejin.im/post/5d1dee34e51d4577790c1cf4 前言 JWT(json web token)的无状态鉴权方式,越来越流行 ...

  8. day1-2基本数据类型

    /*5种基本数据类型 1,Undefined var a; a = undefined Undefined派生自Null 2,Null(本质属于object,单独细分出来的) var a = null ...

  9. 【剑指Offer面试编程题】题目1360:乐透之猜数游戏--九度OJ

    题目描述: 六一儿童节到了,YZ买了很多丰厚的礼品,准备奖励给JOBDU里辛劳的员工.为了增添一点趣味性,他还准备了一些不同类型的骰子,打算以掷骰子猜数字的方式发放奖品.例如,有的骰子有6个点数(点数 ...

  10. js获取一个页面 是从哪个页面过来的

    document.referrer 获取来源页面的url console.log(document.referrer) if(document.referrer=="http://127.0 ...