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」骑行川藏 题目描述 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨. 川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的 ...
随机推荐
- 区块链自问自答 day1
区块链自问自答 day1 简要介绍区块链是什么? 区块链(Blockchain)是一种对等网络下的分布式数据库系统 数据结构中的单向链表是通过每个节点包含一个节点的指针实现"链" ...
- H5视频、音频不能自动播放,Uncaught (in promise) DOMException: play() failed because the user didn't
错误原因:Chrome的autoplay政策在2018年4月做了更改. 解决办法: 第一步,在chrome浏览器中输入:chrome://flags/#autoplay-policy 第二步,在Aut ...
- 读取指定页面中的超链接-Python 3.7
#!/usr/bin/env python#coding: utf-8from bs4 import BeautifulSoupimport urllibimport urllib.requestim ...
- 如何在yii1.0.7中设置数据库连接超时?
继承CDbConnection, 覆盖 init()方法 在 parent::init() 之前设置 $this->setAttribute(PDO::ATTR_TIMEOUT, $this-& ...
- Redis学习记录及Jedis代码示例
文章目录 二.Redis简介 三.Redis安装 1. 下载并解压安装 2. 安装C语言编译环境 3. 修改安装位置 4. 编译安装 5.启动Redis服务器 ①默认启动 ②定制配置项启动 [1]准备 ...
- Mysql综述--数据是如何读存的?(2)
页的结构 页是一种InnoDB管理存储空间的基本单位,它一般大小在16kb左右.实际上存在着许多不同类型的页,我们这次主要介绍的页是用来存储数据的,也叫做索引页. 接下来看看索引页的结构图: 比较重要 ...
- 2019-3-20-UWP-How-to-custom-RichTextBlock-right-click-menu
原文:2019-3-20-UWP-How-to-custom-RichTextBlock-right-click-menu title author date CreateTime categorie ...
- C# 随机 抽奖 50个随机码 不重复
static List<int> Given50RandomNumbers() { List<int> intList = new List<int>(); for ...
- C# Task,new Task().Start(),Task.Run();TTask.Factory.StartNew
1. Task task = new Task(() => { MultiplyMethod(a, b); }); task.Start(); 2. Task task = Task.Run(( ...
- pycharm工具设置py模板
直接上截图把,更加明确清晰 (a)shebang行 #!/usr/bin/python3 (b)预定义的变量要扩展为格式为$ {<variable_name>}的相应值. 可用的预定义文件 ...