LG5201 「USACO2019JAN」Shortcut 最短路树
\(\mathrm{Shortcut}\)
问题描述
题解
最短路树。
显然奶牛的路径就是从\(1\)走到各个草地,于是从\(1\)跑最短路,构建最短路树。
为了保证字典序,从\(1\)到\(n\)依次枚举每个结点,构建。
显然,用贪心的思想,这条边一定是从某个结点\(x\)联向\(1\)的。
然后深度遍历这棵最短路树,在每个结点处处理答案即可。
注意需要long long
\(\mathrm{Code}\)
#include<bits/stdc++.h>
using namespace std;
template<typename Tp>
void read(Tp &x){
x=0;char ch=1;int fh;
while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
if(ch=='-') ch=getchar(),fh=-1;
else fh=1;
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
x*=fh;
}
#define int long long
const int maxn=10000+7;
const int maxm=100000+7;
const int INF=0x3f3f3f3f3f3f3f3fLL;
int n,m,t;
int cows[maxn];
int u[maxm],Head[maxn],Next[maxm],to[maxm],w[maxm],tot=1;
struct node{
int id,dis;
bool operator <(node a)const{
return dis>a.dis;
}
};
void add(int x,int y,int z){
to[++tot]=y,Next[tot]=Head[x],Head[x]=tot,w[tot]=z,u[tot]=x;
}
int Jead[maxn],Mext[maxm],of[maxm],fork=1;
void fafa(int x,int y){
of[++fork]=y,Mext[fork]=Jead[x],Jead[x]=fork;
}
int dis[maxn];
bool vis[maxn];
void dijkstra(){
for(int i=2;i<=n;i++) dis[i]=INF;
priority_queue<node>q;
q.push(node{1,0});dis[1]=0;
while(!q.empty()){
int x=q.top().id;q.pop();
if(vis[x]) continue;vis[x]=1;
for(int i=Head[x];i;i=Next[i]){
int y=to[i];
if(dis[y]>dis[x]+w[i]){
dis[y]=dis[x]+w[i];
q.push((node){y,dis[y]});
}
}
}
}
bool exist[maxn];
void build(){
for(int x=1;x<=n;x++){
for(int i=Head[x];i;i=Next[i]){
int y=to[i];
if(!exist[y]&&dis[y]==dis[x]+w[i]){
fafa(x,y);fafa(y,x);exist[y]=1;
}
}
}
}
bool ins[maxn];
int size[maxn],ans;
void dfs(int x){
ins[x]=1,size[x]=cows[x];
for(int i=Jead[x];i;i=Mext[i]){
int y=of[i];
if(!ins[y]){
dfs(y);size[x]+=size[y];
}
}
ans=max(ans,size[x]*(dis[x]-t));
}
void Init(){
read(n);read(m);read(t);
for(int i=1;i<=n;i++) read(cows[i]);
for(int i=1,x,y,z;i<=m;i++){
read(x);read(y);read(z);
add(x,y,z);add(y,x,z);
}
}
void Work(){
dijkstra();
build();
dfs(1);
printf("%lld\n",ans);
}
signed main(){
freopen("shortcut.in","r",stdin);freopen("shortcut.out","w",stdout);
Init();Work();
fclose(stdin);fclose(stdout);
return 0;
}
LG5201 「USACO2019JAN」Shortcut 最短路树的更多相关文章
- Luogu P5201 [USACO19JAN]Shortcut 最短路树???
最短路树...开眼界了...之前想也没想过.... 先跑出来1到每个点最短路,然后建树时要标记点的入度,否则会多连边...然后深搜时更新新答案就是 #include<cstdio> #in ...
- LG5196 「USACO2019JAN」Cow Poetry 背包+乘法原理
\(\mathrm{Cow Poetry}\) 问题描述 LG5196 题解 因为每句诗的长度一定是\(k\),所以自然而然想到背包. 设\(opt[i][j]\)代表到第\(i\)位时,结尾为\(j ...
- LG5202 「USACO2019JAN」Redistricting 动态规划+堆/单调队列优化
问题描述 LG5202 题解 \[opt[i]=xx+(cnt[i]-cnt[yy]<=0)\] 发现\(cnt[i]-cnt[yy] <= 0\)只能有两种取值 于是直接堆优化即可 \( ...
- LG5200 「USACO2019JAN」Sleepy Cow Sorting 树状数组
\(\mathrm{Sleepy Cow Sorting}\) 问题描述 LG5200 题解 树状数组. 设\(c[i]\)代表\([1,i]\)中归位数. 显然最终的目的是将整个序列排序为一个上升序 ...
- LuoguP5201 [USACO19JAN]Shortcut(最短路树)
字典序?建树时从小枚举,用\(Dijkstra\)的血泪建好树,\(size\)大小决定贡献 #include <iostream> #include <cstdio> #in ...
- Loj#2769-「ROI 2017 Day 1」前往大都会【最短路树,斜率优化】
正题 题目链接:https://loj.ac/p/2769 题目大意 给出\(n\)个点\(m\)条地铁线路,每条线路是一条路径. 求\(1\)到\(n\)的最短路且在最短路径的情况下相邻换乘点的距离 ...
- 「CH6202」黑暗城堡
「CH6202」黑暗城堡 传送门 这道题是要让我们求以点 \(1\) 为源点的最短路树的方案数. 我们先跑一遍最短路,然后考虑类似 \(\text{Prim}\) 的过程. 当我们把点 \(x\) 加 ...
- 「ZJOI2016」解题报告
「ZJOI2016」解题报告 我大浙的省选题真是超级神仙--这套已经算是比较可做的了. 「ZJOI2016」旅行者 神仙分治题. 对于一个矩形,每次我们从最长边切开,最短边不会超过 \(\sqrt{n ...
- 「NOI2012」骑行川藏
「NOI2012」骑行川藏 题目描述 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨. 川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的 ...
随机推荐
- vbs与其他语言进行交互编程(外存传参)
vbs没有自定义排序函数.无需自己造轮子,可以用其他语言来完成这个任务(在传递数据比较简单的情况下,例如只传递数组). 首先用5分钟写一个C++排序的代码.命名为“mysort.cpp”: #incl ...
- Wwise音频解决方案概述
Wwise(Wave Works Interactive Sound Engine,Wwise基础知识,wiki)是Audiokinetic公司提供的跨平台游戏音频解决方案,有着高效完整工作流和工具链 ...
- 【Java语言特性学习之三】Java4种对象引用
为了更灵活的控制对象的生命周期,在JDK1.2之后,引用被划分为(引用的级别和强度由高到低)强引用.软引用.弱引用.虚引用四种类型,每种类型有不同的生命周期,它们不同的地方就在于垃圾回收器对待它们会使 ...
- BIM软件Revit的优点
BIM软件Revit的优点 那么多人喜欢使用这个软件的是因为BIM软件Revit极其强大的集成性和平台性. BIM软件Revit的集成性 建筑是一个复杂数 ...
- php explode容易犯的错误
php explode容易犯的错误 <pre> $pos = strpos($v, 'Controller'); if (is_numeric($pos)) { $kongzhiqifeg ...
- Python自动抢红包,超详细教程,再也不会错过微信红包了!
目录: 0 引言 1 环境 2 需求分析 3 前置准备 4 抢红包流程回顾 5 代码梳理 6 后记 0 引言 提到抢红包,就不得不提Xposed框架,它简直是个抢红包的神器,但使用Xposed框架有一 ...
- OpenGL入门1.4:纹理/贴图Texture
每一个小步骤的源码都放在了Github 的内容为插入注释,可以先跳过 前言 游戏玩家对Texture这个词应该不陌生,我们已经知道了怎么为每个顶点添加颜色来增加图形的细节,但,如果想让图形看起来更真实 ...
- C# 方法的out、ref、params参数
一.out参数实例 [实例]求一个数组中的最大值.最小值.总和.平均值 class Program { static void Main(string[] args) { //写一个方法 求一个数组中 ...
- 2019前端UI框架排行榜
一.Mint UI 流行指数:★★★★ Mint UI是 饿了么团队开发基于 Vue.js 的移动端UI框架,它包含丰富的 CSS 和 JS 组件,能够满足日常的移动端开发需要. 官网:https:/ ...
- c# 值类型和引用类型 笔记
参考以下博文,我这里只是笔记一下,原文会更加详细 c#基础系列1---深入理解值类型和引用类型 堆栈和托管堆c# 值类型和引用类型 红色表示——“这啥?”(真实1个问题引出3个问题) CLR支持的两种 ...