\(\mathrm{Shortcut}\)

问题描述

LG5201

题解

最短路树。

显然奶牛的路径就是从\(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 最短路树的更多相关文章

  1. Luogu P5201 [USACO19JAN]Shortcut 最短路树???

    最短路树...开眼界了...之前想也没想过.... 先跑出来1到每个点最短路,然后建树时要标记点的入度,否则会多连边...然后深搜时更新新答案就是 #include<cstdio> #in ...

  2. LG5196 「USACO2019JAN」Cow Poetry 背包+乘法原理

    \(\mathrm{Cow Poetry}\) 问题描述 LG5196 题解 因为每句诗的长度一定是\(k\),所以自然而然想到背包. 设\(opt[i][j]\)代表到第\(i\)位时,结尾为\(j ...

  3. LG5202 「USACO2019JAN」Redistricting 动态规划+堆/单调队列优化

    问题描述 LG5202 题解 \[opt[i]=xx+(cnt[i]-cnt[yy]<=0)\] 发现\(cnt[i]-cnt[yy] <= 0\)只能有两种取值 于是直接堆优化即可 \( ...

  4. LG5200 「USACO2019JAN」Sleepy Cow Sorting 树状数组

    \(\mathrm{Sleepy Cow Sorting}\) 问题描述 LG5200 题解 树状数组. 设\(c[i]\)代表\([1,i]\)中归位数. 显然最终的目的是将整个序列排序为一个上升序 ...

  5. LuoguP5201 [USACO19JAN]Shortcut(最短路树)

    字典序?建树时从小枚举,用\(Dijkstra\)的血泪建好树,\(size\)大小决定贡献 #include <iostream> #include <cstdio> #in ...

  6. Loj#2769-「ROI 2017 Day 1」前往大都会【最短路树,斜率优化】

    正题 题目链接:https://loj.ac/p/2769 题目大意 给出\(n\)个点\(m\)条地铁线路,每条线路是一条路径. 求\(1\)到\(n\)的最短路且在最短路径的情况下相邻换乘点的距离 ...

  7. 「CH6202」黑暗城堡

    「CH6202」黑暗城堡 传送门 这道题是要让我们求以点 \(1\) 为源点的最短路树的方案数. 我们先跑一遍最短路,然后考虑类似 \(\text{Prim}\) 的过程. 当我们把点 \(x\) 加 ...

  8. 「ZJOI2016」解题报告

    「ZJOI2016」解题报告 我大浙的省选题真是超级神仙--这套已经算是比较可做的了. 「ZJOI2016」旅行者 神仙分治题. 对于一个矩形,每次我们从最长边切开,最短边不会超过 \(\sqrt{n ...

  9. 「NOI2012」骑行川藏

    「NOI2012」骑行川藏 题目描述 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨. 川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的 ...

随机推荐

  1. map 基本使用

    package main import "fmt" func main(){ //定义一个map变量,类型为map[int]string,如果使用map一定初始化,make分配空间 ...

  2. Java 发红包

    使用Java实现发红包的功能. 结构: package redPocket User.java Manager.java Member.java Demo.java 思路: Manager和Membe ...

  3. oracle用户管理, 授权与回收权限

    一. 用户管理参数, 0.删除用户: drop user 用户名 [cascade] 当我们删除用户时, 如改用户已创建过数据对象, 那么删除用户时必须加cascade参数, 用来同步删除 改用户的所 ...

  4. Win10安装 oracle11g 出现INS-13001环境不满足最低要求解决方法

    Win10安装 oracle11g 出现INS-13001环境不满足最低要求 首先,打开你的解压后的database文件夹,找到stage,然后cvu,找到cvu_prereq.xml文件,用note ...

  5. [开源]OSharpNS 步步为营系列 - 2. 添加业务数据层

    什么是OSharp OSharpNS全称OSharp Framework with .NetStandard2.0,是一个基于.NetStandard2.0开发的一个.NetCore快速开发框架.这个 ...

  6. Loj #2568. 「APIO2016」烟花表演

    Loj #2568. 「APIO2016」烟花表演 题目描述 烟花表演是最引人注目的节日活动之一.在表演中,所有的烟花必须同时爆炸.为了确保安全,烟花被安置在远离开关的位置上,通过一些导火索与开关相连 ...

  7. mysql 写计数器需要注意的问题

    MySql计数器,如网站点击数,如何实现高性能高并发的计数器功能 由于并发的时候 不能同时写入一行数据 所以要分开写<pre>先创建表CREATE TABLE `article_view` ...

  8. vue怎么给自定义组件绑定原生事件

     下面主要以4个示例Demo演示(示例代码JS引用的Vue CDN),建议小伙伴直接复制示例代码运行查看, 赶时间的小伙伴可直接往下拉,看示例demo4 注:全局或局部注册的组件称为子组件,其中声明的 ...

  9. vuex 源码解析(三) getter属性详解

    有时候我们需要从store中的state中派生出一些状态,例如: <div id="app"> <p>{{reverseMessage}}</p> ...

  10. 【洛谷5439】【XR-2】永恒(树链剖分,线段树)

    [洛谷5439][XR-2]永恒(树链剖分,线段树) 题面 洛谷 题解 首先两个点的\(LCP\)就是\(Trie\)树上的\(LCA\)的深度. 考虑一对点的贡献,如果这两个点不具有祖先关系,那么这 ...