最短路树。。。开眼界了。。。之前想也没想过。。。。


先跑出来1到每个点最短路,然后建树时要标记点的入度,否则会多连边。。。然后深搜时更新新答案就是

#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#define R register int
#define mp make_pair
const int N=,M=;
using namespace std;
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
int n,m,t,cnt;
int vr[M<<],nxt[M<<],w[M<<],fir[N];
long long sz[N],d[N],ans,c[N];
bool vis[N];
inline void add(int u,int v,int ww) {vr[++cnt]=v,w[cnt]=ww,nxt[cnt]=fir[u],fir[u]=cnt;}
int vv[M<<],nn[M<<],ww[M<<],ff[N];
inline void aadd(int u,int v,int w) {vv[++cnt]=v,ww[cnt]=w,nn[cnt]=ff[u],ff[u]=cnt;}
priority_queue<pair<long long,int> > q;
inline void dijk() {
memset(d,0x3f,sizeof(long long)*(n+)); d[]=; q.push(mp(,));
while(q.size()) {
R u=q.top().second; q.pop(); if(vis[u]) continue; vis[u]=true;
for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
if(d[v]>d[u]+w[i]) d[v]=d[u]+w[i],q.push(mp(-d[v],v));
}
}
}
void dfs(int u) { vis[u]=true;
for(R i=ff[u];i;i=nn[i]) { R v=vv[i];
if(vis[v]) continue; dfs(v); sz[u]+=sz[v];
} ans=max(sz[u]*(d[u]-t),ans);//,cout<<u<<" "<<sz[u]<<" "<<d[u]<<" "<<t<<" "<<sz[u]*(d[u]-t)<<endl;
}
signed main() {
n=g(),m=g(),t=g(); for(R i=;i<=n;++i) sz[i]=g(); for(R i=,u,v,w;i<=m;++i) u=g(),v=g(),w=g(),add(u,v,w),add(v,u,w); cnt=;
dijk(); memset(vis,false,sizeof(vis)); for(R u=;u<=n;++u) for(R i=fir[u];i;i=nxt[i])
if(d[vr[i]]==d[u]+w[i]&&!vis[vr[i]]) vis[vr[i]]=true,aadd(u,vr[i],w[i]),aadd(vr[i],u,w[i]);
memset(vis,false,sizeof(bool)*(n+)); dfs(); printf("%lld\n",ans);
}

2019.04.25

Luogu P5201 [USACO19JAN]Shortcut 最短路树???的更多相关文章

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

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

  2. LG5201 「USACO2019JAN」Shortcut 最短路树

    \(\mathrm{Shortcut}\) 问题描述 LG5201 题解 最短路树. 显然奶牛的路径就是从\(1\)走到各个草地,于是从\(1\)跑最短路,构建最短路树. 为了保证字典序,从\(1\) ...

  3. BZOJ1975[Sdoi2010]魔法猪学院——可持久化可并堆+最短路树

    题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...

  4. hdu 3409 最短路树+树形dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3409 参考博客:http://www.cnblogs.com/woaishizhan/p/318981 ...

  5. LA4080/UVa1416 Warfare And Logistics 最短路树

    题目大意: 求图中两两点对最短距离之和 允许你删除一条边,让你最大化删除这个边之后的图中两两点对最短距离之和. 暴力:每次枚举删除哪条边,以每个点为源点做一次最短路,复杂度\(O(NM^2logN)\ ...

  6. BZOJ4356Ceoi2014 Wall——堆优化dijkstra+最短路树

    题目描述 给出一个N*M的网格图,有一些方格里面存在城市,其中首都位于网格图的左上角.你可以沿着网络的边界走,要求你走的路线是一个环并且所有城市都要被你走出来的环圈起来,即想从方格图的外面走到任意一个 ...

  7. 51nod 1443 路径和树(最短路树)

    题目链接:路径和树 题意:给定无向带权连通图,求从u开始边权和最小的最短路树,输出最小边权和. 题解:构造出最短路树,把存留下来的边权全部加起来.(跑dijkstra的时候松弛加上$ < $变成 ...

  8. Berland and the Shortest Paths CodeForces - 1005F(最短路树)

    最短路树就是用bfs走一遍就可以了 d[v] = d[u] + 1 表示v是u的前驱边 然后遍历每个结点 存下它的前驱边 再用dfs遍历每个结点 依次取每个结点的某个前驱边即可 #include &l ...

  9. LA 4080 战争和物流(最短路树)

    https://vjudge.net/problem/UVALive-4080 题意:给出一个n个结点m条边的无向图,每条边上有一个正权.令c等于每对结点的最短路长度之和.不连通的两点的最短路长度视为 ...

随机推荐

  1. xcode编译静态库选择cpu架构

    此前编译了一个静态库,默认支持了armv7,armv7s,arm64 编译的话肯定是上面三个静态库分别编译出来,然后在把这三个合并成一个单独的库. 如果单个库的大小是10M,那编译总的库大概就30M了 ...

  2. Xcode快捷

  3. JavaScript Array.map

    Array.prototype.map() History Edit This article is in need of a technical review. Table of Contents ...

  4. Eclipse中,将jar包导入为User Library

    项目右键 Properties -> bulid path -> Add Library -> User Library -> User Libraries -> New ...

  5. JAVA基础知识总结5(面向对象特征之一:继承)

    继 承: 1:提高了代码的复用性. 2:让类与类之间产生了关系,提供了另一个特征多态的前提. 父类的由来:其实是由多个类不断向上抽取共性内容而来的. JAVA只支持单继承.java虽然不直接支持多继承 ...

  6. 如何设置Win10文件资源管理器默认打开“这台电脑”

    摘录自:http://www.ithome.com/html/win10/126066.htm

  7. Vbs 脚本编程简明教程之一

    —为什么要使用 Vbs ? 在 Windows 中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件进行复制.粘贴.改名.删除,也许你每天启动 计算机第一件 ...

  8. Mind Map - FreeMind

    FreeMind[1]是一款基于java的免费的脑图(mind mapping)制作与管理软件.FreeMind开发项目组正致力于使其成为一款高效率的工具.FreeMind具有一键“展开/折叠”功能以 ...

  9. vray学习笔记(3)-多维子材质是个什么东西

    多维子材质是个什么东西?为什么出现这个概念? 在3dsmax官方网站,我们可以看到它的定义: The Multi/Sub-Object material lets you assign differe ...

  10. linux ftp、sftp、telnet服务开通、更改Orale最大连接数

    1 ftp服务开通 1.1 检测vsftpd是否安装及启动 先用service vsftpd status 来查看ftp是否开启.也可以使用ps -ef | grep ftp 来查看本地是否含有包含f ...